以下语法无效:
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有点危险/含糊不清?我无法看到第一个陈述是如何或概括为含糊不清的陈述。
答案 0 :(得分:10)
括号意味着线路延续直至关闭。
包装长行的首选方法是使用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个字符。
对我而言,艰难的是重新嵌套嵌套理解的长度。我打破了这些,这样休息实际上有助于提高可读性。