用python的习惯写代码
-
确定python版本
python --version
-
使用PEP8风格
-
了解bytes, str, unicode的区别
python3 有两种表示字符序列的类型: bytes和str
python2 也是两种表示字符序列类型: str和unicode
前者实例包含原始的8位值,后者的实例包含Unicode字符
要将Unicode字符转成二进制(8位值,每个节位有8个二进制),就是用encode,反之使用decode
编写程序时,需要转换成Unicode字符类型(python3的str, python2的unicode) -
使用if/else表达式比or(and)更清晰
-
切片操作不建议同时使用start,end,stride进行操作,stride为正数,下面反面例子
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] a[-2:2:-2] # ['g', 'e'] 这样都不清楚怎么获得 ```
-
使用只有一个表达式的列表推导取代map和filter
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 可以为2整除的数,计算平方值 b = map(lambda x: x**2, filter(lambda x: x%2 == 2, a)) c = [x**2 for x in a if x %2 == 0] ```
列表推导式,迭代器,生成器的练习代码放在github仓库
函数
-
尽量使用异常处理,不要返回None
-
了解作用域,闭包函数,高阶函数, 装饰器
作用域,有4个:局部(方法内),局部外(内置函数的外层),全局(模块级),内置
有四种作用域:
L(Local):最内层,包含局部变量,比如一个函数/方法内部。
E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个 函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
G(Global):当前脚本的最外层,比如当前模块的全局变量。
B(Built-in): 包含了内建的变量/关键字等。,最后被搜索闭包函数:函数嵌套和自由变量
a = 1 def test(): b = 2 # 自由变量 c = 3 def inner(): # 函数嵌套 print("a= %s" %a) print("b= %s" %b) print("__closure__==", inner.__closure__) return inner
高阶函数:我们知道一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),如果满足其一,则为高阶函数
常见的内置高阶函数 map, filter…
def innerfunc(): print("innerfunc..") def highfunc(func): func() print("highfunc..") highfunc(innerfunc)
递归函数: 调用自己本身的函数叫递归函数
def fib(n): return 1 if n < 2 else fib(n-1) + fib(n-2) >>> 1 1 2 3 5 8 13 21 34 55 89 144 ...
装饰器: 对一个函数、方法、或者类进行加工,作用是为已经存在的对象添加额外的功能,提升代码的可读性
用法有函数装饰器,类装饰器,实现方式有函数实现,类实现 -
参数的默认值,尽量用None或不可变的值,因为程序加载模块时,函数只执行一次哦
类与继承
元类及属性
并发及并行
内置模块
协作开发
部署
目前还不完整,慢慢补进来