8

以下在语法上无效:

if extremely_long_condition_that_takes_up_a_whole_line and
  another_condition:
    #do something

以下是有效的:

if (extremely_long_condition and
  another_condition):
    #do something

为什么这些不同?更一般地说,为什么 #2 可以,但 #1 有点危险/模棱两可?我看不出第一个陈述是如何或概括为一个模棱两可的陈述。

4

5 回答 5

11

括号意味着行延续直到它们被关闭。

PEP-8 谈到了这一点

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

或者,在语言参考中更正式地讨论:

可以使用反斜杠字符 (\) 将两个或多个物理行连接成逻辑行

括号、方括号或花括号中的表达式可以在多个物理行上拆分,而无需使用反斜杠。

于 2013-03-27T17:59:50.747 回答
7

没有大括号,在存在一元运算符的情况下肯定是模棱两可的。

考虑这一行:

a = 3 + 4
+1

在这里,您有一个简单的加法,然后是一元正运算符。

您可能会争辩说带有尾随运算符的行并不模棱两可(我目前想不出一个反例),所以我将求助于“特殊情况不足以打破规则”部分蟒蛇之禅。


另请注意,现在的方式是,您可以在没有操作符的情况下跨多行连接字符串:

a = ("Hello "
     "World")
于 2013-03-27T18:01:59.973 回答
1

另一个有效的,丢失括号PEP 8不推荐)

if extremely_long_condition_that_takes_up_a_whole_line and \
  another_condition:
    #do something

PEP 8开始:

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

我建议你阅读PEP 8

于 2013-03-27T18:06:14.140 回答
0

所有括号都带有内置的行继续。我不确定and,但不鼓励继续行(\-style )的原因是尾随空格会使命令无效,而且很难看到。但是,括号内的尾随空格永远不会破坏它。

于 2013-03-27T18:00:21.257 回答
0

当然,您可以使用函数使其更易于理解。

代替:

if (extremely_long_condition_that_takes_up_a_whole_line and
  another_condition):
    #do something

你可以这样做:

def cond():
    extremely_long_condition_that_takes_up_a_whole_line

def another_condition():
     # whatever

if cond() and another_condition():
     #do something 

或者,如果你有一堆条件:

if all(conditions(x) for x in seq):
     #do something

Python 的设计旨在鼓励将长行和块分解成更小的更易读的位。你遇到了这种鼓励。

我尝试将行数保持在 70 个字符以内。

对我来说最难的是限制嵌套理解的长度。我打破了这些,以便打破实际上有助于可读性。

于 2013-03-27T18:16:46.390 回答