编程细节
1、函数参数的默认值尽量不要是可变对象
python中,一切皆对象。函数也不例外。默认值在函数的func_defaults属性中,如果是默认值可变对象,某次被修改,默认值就会被改变。
2、类属性不同于对象属性
- 对象可以访问/修改类属性,而类不可以访问修改对象属性
- 类属性对所有对象而言是唯一共同的,对象属性则是各自的
3、对象属性查找方法
先在本对象属性中查找,再去类属性中找,最后去父类属性中查找
4、变量查找方法
先在局部空间(locals) 中找,再去嵌套外层函数中找,再去全局空间中找(globals),最后去系统空间中(sys.modules)找
所以,对于循环遍历的执行体中,最好用局部变量记住其他空间中的变量,缩短查找时间
5、sort与sorted
Sorted(iterable, cmp, key, reverse)
s.sort(cmp, key, reverse)
- Sorted适用于任何迭代对象(包括dict),sort仅适用于列表
- Sorted排序后原有对象保持不变;sort排序后会修改原有对象
- 无论哪者,使用key的效率都要比cmp高。这里,key函数是接受迭代里面任何一个元素做参数,进行函数运算之后按照该结果进行排序;而cmp函数式接受两个元素做参数,进行运算,看结果与0的大小关系。在进行比较中,key函数针对每个元素只会调用一次,而cmp要执行多次
6、Mixin模式
Python语言是动态,所谓mixin模式就是动态修改类之间关系。比如通过__bases__修改继承关系等等,从而间接修改此类的功能(继承了新函数)。
7、线程同步
http://yoyzhou.github.io/blog/2013/02/28/python-threads-synchronization-locks/