字符串

Tip

即使参数都是字符串, 使用%操作符或者格式化方法格式化字符串. 不过也不能一概而论, 你需要在+和%之间好好判定.

  1. Yes: x = a + b
  2. x = '%s, %s!' % (imperative, expletive)
  3. x = '{}, {}!'.format(imperative, expletive)
  4. x = 'name: %s; score: %d' % (name, n)
  5. x = 'name: {}; score: {}'.format(name, n)
  1. No: x = '%s%s' % (a, b) # use + in this case
  2. x = '{}{}'.format(a, b) # use + in this case
  3. x = imperative + ', ' + expletive + '!'
  4. x = 'name: ' + name + '; score: ' + str(n)

避免在循环中用+和+=操作符来累加字符串. 由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间. 作为替代方案, 你可以将每个子串加入列表, 然后在循环结束后用 .join 连接列表. (也可以将每个子串写入一个 cStringIO.StringIO 缓存中.)

  1. Yes: items = ['<table>']
  2. for last_name, first_name in employee_list:
  3. items.append('<tr><td>%s, %s</td></tr>' % (last_name, first_name))
  4. items.append('</table>')
  5. employee_table = ''.join(items)
  1. No: employee_table = '<table>'
  2. for last_name, first_name in employee_list:
  3. employee_table += '<tr><td>%s, %s</td></tr>' % (last_name, first_name)
  4. employee_table += '</table>'

在同一个文件中, 保持使用字符串引号的一致性. 使用单引号’或者双引号”之一用以引用字符串, 并在同一文件中沿用. 在字符串内可以使用另外一种引号, 以避免在字符串中使用. GPyLint已经加入了这一检查.

(译者注:GPyLint疑为笔误, 应为PyLint.)

  1. Yes:
  2. Python('Why are you hiding your eyes?')
  3. Gollum("I'm scared of lint errors.")
  4. Narrator('"Good!" thought a happy Python reviewer.')
  1. No:
  2. Python("Why are you hiding your eyes?")
  3. Gollum('The lint. It burns. It burns us.')
  4. Gollum("Always the great lint. Watching. Watching.")

为多行字符串使用三重双引号”“”而非三重单引号’‘’. 当且仅当项目中使用单引号’来引用字符串时, 才可能会使用三重’‘’为非文档字符串的多行字符串来标识引用. 文档字符串必须使用三重双引号”“”. 不过要注意, 通常用隐式行连接更清晰, 因为多行字符串与程序其他部分的缩进方式不一致.

  1. Yes:
  2. print ("This is much nicer.\n"
  3. "Do it this way.\n")
  1. No:
  2. print """This is pretty ugly.
  3. Don't do this.
  4. """