这是因为用逗号分隔的表达式是在整个逗号分隔的元组(这是Python语法术语中的“表达式列表”)之前进行求值的。因此,当您这样做时foo_bar_tuple=="foo", "bar"
,将被解释为(foo_bar_tuple=="foo"), "bar"
。在文档中描述了此行为。
如果仅自己编写这样的表达式,则可以看到以下内容:
>>> 1, 2 == 1, 2 # interpreted as "1, (2==1), 2"
(1, False, 2)
未带括号的元组的SyntaxError是因为未带括号的元组不是Python语法中的“原子”,这意味着它不是if
条件的唯一内容。(您可以通过跟踪语法来自己验证这一点。)