编写高质量的代码 -- 代码风格

编写高质量的代码

代码风格

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语句中。

常见陷阱

  • 可变的默认参数
  • 延迟绑定的闭包

你可能感兴趣的:(编写高质量的代码 -- 代码风格)