为什么这个 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 语法 的背景知识)。
我在 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 语法 的背景知识)。