如何在Python中换行(分割长代码行)?

1372 投票
10 回答
2499320 浏览
提问于 2025-04-11 09:15

给定:

e = 'a' + 'b' + 'c' + 'd'

我怎么把上面的内容写成两行呢?

e = 'a' + 'b' +
    'c' + 'd'

10 个回答

89

使用反斜杠来结束一行代码是有风险的,因为如果在反斜杠后面加了空格(这点很难被发现),那么反斜杠就不再起作用了,可能会导致你预想的效果不再实现。

想了解更多,可以查看 Python 的一些用法和反用法(适用于 Python 2Python 3)。

307

来自 PEP 8 -- Python代码风格指南:

处理长行代码的推荐方式是使用Python在括号、方括号和大括号内的隐式换行。 如果一行代码太长,可以通过在括号内换行来分成多行。这样做比用反斜杠来换行要更好。

不过,有时候使用反斜杠也是合适的。例如,多个长的with语句不能使用隐式换行,所以可以用反斜杠:

with open('/path/to/some/file/you/want/to/read') as file_1, \
     open('/path/to/some/file/being/written', 'w') as file_2:
     file_2.write(file_1.read())

还有一种情况是使用assert语句。

确保继续的那一行缩进正确。推荐在二元运算符后面换行,而不是前面。这里有一些例子:

class Rectangle(Blob):

  def __init__(self, width, height,
                color='black', emphasis=None, highlight=0):
       if (width == 0 and height == 0 and
          color == 'red' and emphasis == 'strong' or
           highlight > 100):
           raise ValueError("sorry, you lose")
       if width == 0 and height == 0 and (color == 'red' or
                                          emphasis is None):
           raise ValueError("I don't think so -- values are %s, %s" %
                            (width, height))
       Blob.__init__(self, width, height,
                     color, emphasis, highlight)file_2.write(file_1.read())

PEP8现在推荐与数学家和出版商使用的相反的约定(在二元运算符处换行),这样可以提高可读性。

Donald Knuth的风格是在二元运算符前面换行,这样可以让运算符垂直对齐,从而减轻眼睛在判断加减项时的负担。

来自 PEP8: 换行应该在二元运算符前还是后?:

Donald Knuth在他的《计算机与排版》系列中解释了传统规则:“虽然段落中的公式总是在二元运算和关系之后换行,但显示的公式总是在二元运算之前换行。”

遵循数学的传统通常会使代码更易读:

# Yes: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

在Python代码中,可以在二元运算符前后换行,只要在局部保持一致就可以。对于新代码,建议使用Knuth的风格。

[3]: Donald Knuth的《TeXBook》,第195和196页

1547

什么是换行?你可以把参数放在下一行,这样也没问题:

a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
            blahblah6, blahblah7)

另外,你也可以这样做:

if (a == True and
    b == False):

或者使用明确的换行:

if a == True and \
   b == False:

想了解更多信息,可以查看风格指南

使用括号的话,你的例子可以写成多行:

a = ('1' + '2' + '3' +
    '4' + '5')

同样的效果也可以通过明确的换行来实现:

a = '1' + '2' + '3' + \
    '4' + '5'

注意,风格指南提到使用括号进行隐式换行是更推荐的,但在这个特定情况下,单纯在表达式周围加上括号可能不是最佳选择。

撰写回答