Python元组分配和条件语句检入
这个问题已经在这里有了答案 :
元组何时需要括号? (3个答案)
6年前关闭。
因此,我偶然发现python中元组的特定行为,我想知道是否有特定原因发生。
尽管我们完全有能力将元组分配给变量,而无需将其显式地括在括号中:
>>> foo_bar_tuple = "foo","bar"
>>>
我们无法以以前的方式打印或检查条件if语句中包含元组的变量(没有显式地键入括号):
>>> print foo_bar_tuple == "foo","bar"
False bar
>>> if foo_bar_tuple == "foo","bar": pass
SyntaxError: invalid syntax
>>>
>>> print foo_bar_tuple == ("foo","bar")
True
>>>
>>> if foo_bar_tuple == ("foo","bar"): pass
>>>
有人为什么吗?在此先感谢,尽管我没有找到任何类似的主题,但是如果您认为这可能是重复的,请通知我。干杯,亚历克斯
-
这是因为用逗号分隔的表达式是在整个逗号分隔的元组(这是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
条件的唯一内容。(您可以通过跟踪语法来自己验证这一点。)