什么时候python运算符是一个续行?

时间:2013-03-27 17:58:39

标签: python syntax

以下语法无效:

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有点危险/含糊不清?我无法看到第一个陈述是如何或概括为含糊不清的陈述。

5 个答案:

答案 0 :(得分:10)

括号意味着线路延续直至关闭。

PEP-8 talks about this

  

包装长行的首选方法是使用Python的暗示   括号,括号和括号内的行继续。排长龙   可以通过包装表达式来分解多行   括弧。这些应该优先使用反斜杠   换行。

或者,在language reference

中更正式地讨论了它
  

可以使用两条或更多条物理线连接成逻辑线   反斜杠字符(\)

     

括号,方括号或花括号中的表达式可以是   在不使用反斜杠的情况下拆分多个物理行。

答案 1 :(得分:7)

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

考虑一下:

a = 3 + 4
+1

在这里你有一个简单的加法,然后是一元正算子。

你可能会认为带有尾随运算符的一行并不含糊(我现在不能想到一个反例),所以我会回到“特殊情况不够特别违反规则” “蟒蛇的一部分。


另请注意,现在的方式是,您可以跨多行连接字符串而无需操作符

a = ("Hello "
     "World")

答案 2 :(得分:1)

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

if extremely_long_condition_that_takes_up_a_whole_line and \
  another_condition:
    #do something

来自PEP 8

  

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

我建议你阅读PEP 8

答案 3 :(得分:0)

所有括号都内置了续行。我不确定and特别是,但不鼓励线条延续(\ - 样式)的原因是尾随空格可能使命令无效,而且很难看到。然而,在parens中的尾随空格永远不会破坏它。

答案 4 :(得分: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个字符。

对我而言,艰难的是重新嵌套嵌套理解的长度。我打破了这些,这样休息实际上有助于提高可读性。