将常量定义到一个文件下
(1) 常量名使用所有字母大写,用下划线连接各个单词
(2) 自定义类来实现常量功能
|
|
利用断言判断错误
|
|
- 断言用在逻辑无法到达的地方或常态下为真,对于本身异常能够处理则不用断言
- 需要判断返回值是否为合理时使用断言
充分利用Lazy evaluation特性–在真正需要结果时才执行代码
- 避免不必要的计算,if x and y==>只有x为真才会计算y;if x or y:当x为真时不会计算y
- 节约空间12345678def fib():a, b = 0, 1while True:yield aa,b = b, a+bfrom itertools import isliceprint list(islice(fib(),5))[0,1,1,2,3]
不推荐使用type进行类型检测
|
|
谨慎使用eval()
|
|
eval计算expression并输出结果,其中globals是字典,代表全局空间(当没有builtins时,默认为当前空间),locals类似globals代表局部空间
构建合理的包层次管理module
包简易上可以等同于目录下有init.py的文件夹
|
|
from Package import *无法将Package下所有module导入,仅是执行了init.py,所以需要对init.py做修改:
|
|
使用with自动关闭资源
|
|
with的上下文管理器机制是这样一个对象:它定义程序运行时需要建立的上下文,处理程序的进入和退出,实现了上下文管理协议,即在对象中定义enter()和exit()方法。with语句支持嵌套,支持多个with子句.用户也可以定义自己的上下文管理器来控制程序的运行,只需要实现上下文协议便能够和with语句一起使用。
|
|
else子句简化循环使用
|
|
当循环“自然”终结(循环条件为假)时else从句会被执行一次,而当循环是由break语句中断时,else子句就不被执行。
在Python的异常处理中,try块没有抛出任何异常时,执行else块。
|
|
格式化字符串时尽量使用.format方式而不是%
%操作符的基本形式为:%[转换标记][宽度[.精确度]] 转换类型
|
|
.format方式的基本语法为:[[填充符]对齐方式][符号][#][0][宽度][,][.精确度][转换类型]
|
|
慎用变长参数
使用*args来实现可变参数列表
*args用于接受一个包装为元组形式的参数列表来 传递非关键字参数,参数个数可以任意
|
|
使用**kwargs接受字典形式的关键字参数列表
字典的键值对分别表示不可变参数的参数名和值
|
|
复杂使用
|
|
在4种不同形式的参数同时存在的情况下,会首先满足普通参数,然后是默认参数.如果剩余的参数个数能够覆盖所有的默认参数,则默认参数会使用传递时候的值,如标注①处的函数在调用的时候xlabel和ylabel的值分别为“testl”和“test2”;如果剩余参数个数不够,则尽最大可能满足默认参数的值,标注②中xlabel值为“testl”,而ylabel则使用默认参数y.除此之外其余的参数除了键值对以 外所有的参数都将作为args的可变参数,kwargs则与键值对对应.
可变长参数适合在下列情况下使用
- 为函数添加一个装饰器
- 如果参数的数目不确定,可以考虑使用变长参数
- 用来实现函数的多态或者在继承情况下子类需要调用父类的某些方法的时候