为什么在'and'、'or'等上没有Python隐式续行?
有没有什么原因导致这个在Python中不管用呢?
if 1 != 1 or
2 != 2:
print 'Something is wrong...'
3 个回答
4
因为“明确比隐晦更好”;如果代码中有行继续符号没有标记,会让读代码的人感到困惑(尤其是在那些空格有特殊意义的编程语言中)。而且,代码被阅读的次数远远超过被写的次数。
4
在Python中,隐式换行只会在括号、方括号或大括号打开的情况下发生。也就是说,如果你在条件周围加上括号,它就能正常工作。
6
也许这样做是为了避免语法上的歧义,但我觉得这种行为符合PEP 20的精神,特别是其中提到的“简单比复杂好”。换句话说,“除非你有很好的理由,为什么表达式要跨多行呢?”如果你有正当理由,Python提供了语法工具来解决这个问题。
[编辑] 我又多读了一些资料,有几个有趣的参考:
- 语句的词法定义说明,逻辑行以换行符结束。每次添加隐式续行的情况都变成了例外。
- PEP 3125 针对Python 3,提议去掉反斜杠(
\
)续行,但由于缺乏支持而被拒绝。- 邮件列表中的讨论提醒我们,括号续行的出现是因为换行符并不会结束语句,而括号则保持不平衡。
- 在同一讨论中,Guido反对这个改变,因为像下面这样的错误会被掩盖:
x = y+ # Used to be y+1, the 1 got dropped
f(x)
我最后想说的是,反斜杠(或打开的括号)提醒我们,语句在下一行继续。根据你的缩进,续行可能会被误认为是一个独立的语句(我觉得另一个回复也提到了这一点)。