编写高质量的代码
代码风格
PEP8
PEP 20 - the Zen of Python
一般性建议
- 明确胜于隐晦
- 留白胜于紧凑
- 错误也不应被默默地忽略,除非你明确地忽视
- 函数参数使用起来应该符合直觉
- 位置参数
- 关键字参数
- 任意数量参数列表
- 任意数量关键字参数字典
- 如果实现很难解释,那就不是个好思路
- 我们都是负责任的用户
所有“内部”变量名称前面加“_”前缀
- 尽量尽在一处返回函数结果
约定
-
检查相等性的替代方法
#直接检查值 if attr: print 'attr is truthy!'
-
访问字典元素
d = {'hello':'world'} print d.get ('hello', 'default_value') #或者 if 'hello' in d: print (d['hello'])
-
操作列表
#过滤出大于4的元素 a = [3, 4, 5] b = [i for i in a if i > 4] #或者 b = filter (lambda x: x>4, a) #为所有元素加上3 a = [3, 4, 5] b = [i + 3 for i in a] #或者 a = map (lambda i: i+3, a)
使用enumerate()来维护列表元素位置索引
```python
a = ["icky", "ice", "ping", "pong", "box", "pad" ]
for i, item in enumerate (a):
print ("{i} : {item}".format (i = i, item = item))
```
- 代码续行
更好地方法是将代码元素包含在圆括号内。
习语
- 解包
filename, ext = "my_photo.png".rsplit (".", 1) #用解包来交换变量值 a, b = b, a #嵌套解包 a, (b, c) = 1, (2, 3) #Python3中新的加强版解包方法 a, *rest = [1, 2, 3] # a = 1, rest = [2, 3] a, *middle, c = [1, 2, 3, 4] # a = 1, middle = [2, 3], c = 4
-
忽略一个值
如果解包时需要赋值而又不需要其中某个值,可以使用双下划线"__"filename = 'foobar.txt' basename, __, ext = filename.rpartition ('.')
- 创建一个包含N个相同对象的列表
- 异常安全的上下文
with语句和上下文管理协议来替代try/finally语句。
该协议包含两个方法:enter()和exit(),如果一个对象实现了这两个方法,就能用在with语句中。
常见陷阱
- 可变的默认参数
- 延迟绑定的闭包
网友评论