为什么在'and'、'or'等上没有Python隐式续行?

5 投票
3 回答
523 浏览
提问于 2025-04-16 23:02

有没有什么原因导致这个在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)

我最后想说的是,反斜杠(或打开的括号)提醒我们,语句在下一行继续。根据你的缩进,续行可能会被误认为是一个独立的语句(我觉得另一个回复也提到了这一点)。

撰写回答