为什么这个 Python 布尔比较 return 是一个三元组?

Why does this Python boolean comparison return a triple?

我在 Python 2.7.8 的命令行上玩,遇到了这个行为:

>>> "902".isdigit() == True
True
>>> "902".isdigit(), "2".isdigit() == True
(True, True)
>>> "902".isdigit(), "2".isdigit() == True,True
(True, True, True)
>>> ("902".isdigit(), "2".isdigit()) == (True,True)

我发现这令人惊讶。我原本希望 >>> "902".isdigit(), "2".isdigit() == True,True 简单地 return True 就好像我把两个表达式都括在括号中使它们成为元组一样。为什么 Python return 这个布尔元组,而不是一个?这个元组代表什么布尔比较?

因为:

"902".isdigit(), "2".isdigit() == True,True

解释为:

("902".isdigit(), ("2".isdigit() == True), True)

请注意,您不应使用 == 测试布尔值;编写测试的更 pythonic 方式是:

"902".isdigit() and "2".isdigit()

添加到 jonrsharpe 的回答:

之所以这样解释是因为 Python 解析器无法确定是否:

 "902".isdigit(), "2".isdigit() == True, True

本来是:

("902".isdigit(), ("2".isdigit() == True), True)

或:

("902".isdigit(), "2".isdigit()) == (True, True)

基本上没有办法(从语法角度)不使用 explicit 括号来确定这一点。

参见:Full Grammar Specification但您需要一些 BNF/EBNF 语法 的背景知识)。