※ [本文转录自 Python 看板 #1HaYY8IM ]
作者: sandwichC (没回应=挂站) 看板: Python
标题: [翻译] Google 建议的 Python 风格指南 28,29
时间: Tue May 14 20:05:25 2013
原文网址:http://google-styleguide.googlecode.com/svn/trunk/pyguide.html
* 类别
若没有继承自其他类别,则一个类别应明确写出继承自 object 类别。即使是嵌入
类别 (nested class) 也应遵守。
 Yes: class SampleClass(object):
         pass
     class OuterClass(object):
         class InnerClass(object):
             pass
     class ChildClass(ParentClass):
         """Explicitly inherits from another class already."""
No: class SampleClass:
        pass
    class OuterClass:
        class InnerClass:
            pass
继承自 object 能确保 property 正常作用,并确保程式能与 Python 3000 (编案
:即 Python 3.0) 并容。某些能读取类别意义的方法也能继承自 object,包括:
__new__, __init__, __delattr__, __getattribute__, __setattr__, __hash__,
__repr__, and __str__。
* 字串
用 % 运算符号来格式化字串,即使参数全是字串也应如此。然而,你应聪明地判断
使用 + 与 % 的时机。
Yes: x = a + b
     x = '%s, %s!' % (imperative, expletive)
     x = 'name: %s; score: %d' % (name, n)
No: x = '%s%s' % (a, b)  # use + in this case
    x = imperative + ', ' + expletive + '!'
    x = 'name: ' + name + '; score: ' + str(n)
在循环中避免使用 + 及 += 来组成字串,这是因为字串是不可变的物件,因此在操
作的过程中需要创造很多非必要的暂时物件,并导致二次方而非线性的执行时间。
你应该用把每个子字串当作 list 并把 list 加在一起,循环结束后再用 ''.join
来转换成完整的字串 (或者,把每个子字串写入 cStringIO.StringIO 暂存中)。
Yes: items = ['<table>']
     for last_name, first_name in employee_list:
         items.append('<tr><td>%s, %s</td></tr>' % (last_name, first_name))
     items.append('</table>')
     employee_table = ''.join(items)
No: employee_table = '<table>'
    for last_name, first_name in employee_list:
        employee_table += '<tr><td>%s, %s</td></tr>' % (last_name, first_name)
    employee_table += '</table>'
多行的字串用 """ 而非 '''。另外,使用隐性的多行连接会使程式更清楚,因为多
行的字串的缩排方式与其他地方常常不一致。
Yes:
  print ("This is much nicer.\n"
         "Do it this way.\n")
No:
    print """This is pretty ugly.
Don't do this.
"""