如何在Python中进行换行符(行延续)?

2022-09-05 00:58:26

鉴于:

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

我如何用两行写上面的内容?

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

答案 1

什么是线?您可以在下一行上有参数而不会出现任何问题:

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'

请注意,样式指南说最好使用带括号的隐式延续,但在这种特殊情况下,只是在表达式周围添加括号可能是错误的方法。


答案 2

来自 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())

另一种情况是断言语句。

确保适当地缩进连续的行。在二元运算符周围中断的首选位置是在运算符之后,而不是在运算符之前。一些例子:

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在他的《计算机与排版》系列中解释了传统规则:“虽然段落中的公式总是在二元运算和关系之后断开,但显示的公式总是在二元运算之前断开”[3]。

遵循数学传统通常会导致代码更具可读性:

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

在 Python 代码中,允许在二进制运算符之前或之后中断,只要约定在本地一致即可。对于新代码,建议使用Knuth的样式。

[3]:唐纳德·高德纳的《The TeXBook》,第195和196页