作者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.
"""
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 68.232.121.105
※ 编辑: sandwichC 来自: 68.232.121.105 (05/14 20:07)
1F:推 jlhc:好奇一下 现在%和format 哪个应用上会比较推荐? 05/14 21:29
2F:→ uranusjr:如果你一定只会用到 2.7 和 3 的话 format 通常比较好 05/14 21:55
4F:推 timTan:Format好用 05/14 23:10
5F:推 kilfu0701:推~ 现在都用format来写了 XD 05/15 02:03
6F:→ ykjiang:format 的确好用,但 % 比较通用 05/15 12:39
7F:推 jlhc:感谢楼上几位的回覆 05/24 01:51