Effective-Python

来源:互联网 发布:服务器安装mysql数据库 编辑:程序博客网 时间:2024/06/16 06:30
编写pythonic代码
1.python 变量互换可以直接用不用中间变量  a, b = b , a
2,一般写str.format()
3.python 的三元操作符是 if else  等价于 ? :
4.没有 switch ..case分支语句
5.利用 assert 断言语句来发现问题 但是用断言有代价 一般本身异常能够处理就不要再使用断言

6.建议少用 type() 因为当某个类(没有实现相关方法或实现了只是一个异常)继承 int 类时用类型检查会返回false 可以用isinstance(object, classinfo)
7.有节制的使用from...import 将模块加载到sys.modules集中
8.i+=1  不等于++i
9.join() 方法效率高于 + 操作符
10.建议用 format 形式 格式种类多  而且是字典形式 
11.test1 = [1,['a',1,2],[2,4],6]
def change(list):
    test2 = test1
    test2 = [1,2,3] #重新创建内存
   print(test2,id(test2))

def change2(list):
    test2 = test1
    test2 = [:1] #不会重新创建内存
   print(test2,id(test2))

change(test1)
#change(test1)

print(test1,id(test1))  #切记python中传参即不是引用也不是传值  是传对象或者是传对象的引用   

12.切记默认参数潜在的问题
如:  def change( name1, name2 = []) name2 =[]会记住多次调用的值      
13.解释器直接输入默认用的是 面向repr() 而 print() 调用的是 str()     
14.判断是不是字符串用 isinstance(s,basestring)
15.注意 split()  与 split('') 的不同
16. __init__() 只是初始化方法不是构造器它的工作是在类的对象创建好之后进行变量的初始化.__new__()方法才会真正创建实例 ,是类的构造方法
17.多继承树查找 有俩种第一种是自底向上深度优先 还一种是 自底向上 从左至右 找到为止
18.记得类通过点语法访问属性与实例访问时__get__()参数的不同而结果不同


19.注意 __getattr__() 与注意 __getattribute__()实例属性的获取和拦截方法(非类属性)后者是无条件调用,而前者是只有在后者引发异常的情况下才会被调用.__getattribute__() 可以理解为设置属性 __getattr__() 可以理解为异常property只是对访问属性的方法做了包装,可以真直接用点语法,__get__()可以理解为属性描述函数(descriptor)但注意的是使用类访问不存在的变量是,不会经过__getattr__()函数.而descriptor(即实现了__get__()的类)不存在此问题,只是把instance标识为none而已.
20.对象协议就是一些内置的相关方法形如:__str__()