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

我有很长的一行代码,我想分解成多行。 我使用什么语法?

例如,添加一堆字符串,

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

像这样:

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

什么是线路? 你可以在下一行有参数,没有任何问题:

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

否则,你可以做这样的事情:

 if a == True and \ b == False 

检查风格指南了解更多信息。

从你的榜样:

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

要么:

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

请注意,风格指南指出,使用带括号的隐式连续是首选,但在这种特殊情况下,在表达式周围添加括号可能是错误的方法。

从Python代码的风格指南 :

包装长行的首选方法是在括号,括号和大括号内使用Python的隐含行连续。 通过将表达式放在圆括号中,长行可以分成多行。 这些应该优先使用反斜杠来续行。

反斜杠有时可能仍然适用。 例如,long,multiple with-statements不能使用隐式延续,所以反斜杠是可以接受的:

 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) 

编辑: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]:Donald Knuth的The TeXBook,第195和196页

使用反斜杠结束行的危险在于,如果在反斜杠之后添加了空格(当然,这很难看出),反斜杠不再按照您的想法进行。

有关更多信息,请参阅Python惯用语和反习惯用法(适用于Python 2或Python 3 )。

你可以在括号和大括号之间划线。 此外,您可以将反斜杠字符\附加到一行以显式地将其分开:

 x = (tuples_first_value, second_value) y = 1 + \ 2 

\放在行尾,或者将语句放在parens ( .. ) 。 来自IBM :

 b = ((i1 < 20) and (i2 < 30) and (i3 < 40)) 

要么

 b = (i1 < 20) and \ (i2 < 30) and \ (i3 < 40) 

从马的嘴: 明确的线加入

两条或多条物理线路可以使用反斜线字符( \ )连接成逻辑线路,如下所示:当物理线路以不是字符串文字或注释的一部分的反斜线结尾时,它将与以下内容形成一个逻辑行,删除反斜杠和下面的行尾字符。 例如:

 if 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 1 

以反斜杠结尾的行不能带注释。 反斜杠不会继续评论。 除了字符串文字之外,反斜杠不会继续记号(也就是说,除字符串文字以外的记号不能通过使用反斜杠的物理线段分开)。 反斜线在字符串外部的一行上是非法的。

Interesting Posts