字符串
Tip
即使参数都是字符串, 使用%操作符或者格式化方法格式化字符串. 不过也不能一概而论, 你需要在+和%之间好好判定.
- Yes: x = a + b
- x = '%s, %s!' % (imperative, expletive)
- x = '{}, {}!'.format(imperative, expletive)
- x = 'name: %s; score: %d' % (name, n)
- x = 'name: {}; score: {}'.format(name, n)
- No: x = '%s%s' % (a, b) # use + in this case
- x = '{}{}'.format(a, b) # use + in this case
- x = imperative + ', ' + expletive + '!'
- x = 'name: ' + name + '; score: ' + str(n)
避免在循环中用+和+=操作符来累加字符串. 由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间. 作为替代方案, 你可以将每个子串加入列表, 然后在循环结束后用 .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>'
在同一个文件中, 保持使用字符串引号的一致性. 使用单引号’或者双引号”之一用以引用字符串, 并在同一文件中沿用. 在字符串内可以使用另外一种引号, 以避免在字符串中使用. GPyLint已经加入了这一检查.
(译者注:GPyLint疑为笔误, 应为PyLint.)
- Yes:
- Python('Why are you hiding your eyes?')
- Gollum("I'm scared of lint errors.")
- Narrator('"Good!" thought a happy Python reviewer.')
- No:
- Python("Why are you hiding your eyes?")
- Gollum('The lint. It burns. It burns us.')
- Gollum("Always the great lint. Watching. Watching.")
为多行字符串使用三重双引号”“”而非三重单引号’‘’. 当且仅当项目中使用单引号’来引用字符串时, 才可能会使用三重’‘’为非文档字符串的多行字符串来标识引用. 文档字符串必须使用三重双引号”“”. 不过要注意, 通常用隐式行连接更清晰, 因为多行字符串与程序其他部分的缩进方式不一致.
- Yes:
- print ("This is much nicer.\n"
- "Do it this way.\n")
- No:
- print """This is pretty ugly.
- Don't do this.
- """