我在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
只是简单地返回True
,好像我已将括号中的两个表达式包围起来,使它们成为元组。为什么Python会返回这个布尔元组而不是单个元素?这个元组代表什么布尔比较?
答案 0 :(得分:8)
由于:
"902".isdigit(), "2".isdigit() == True,True
被解释为:
("902".isdigit(), ("2".isdigit() == True), True)
请注意,您不应该使用==
来测试布尔值;一种更加pythonic的方式来编写测试:
"902".isdigit() and "2".isdigit()
答案 1 :(得分:4)
添加到jonrsharpe的答案:
以这种方式解释它的原因是因为Python解析器无法确定是否:
"902".isdigit(), "2".isdigit() == True, True
原意是:
("902".isdigit(), ("2".isdigit() == True), True)
或:
("902".isdigit(), "2".isdigit()) == (True, True)
基本上没有办法(从语法角度)来确定这一点而不使用显式括号。
请参阅:Full Grammar Specification(但您需要一些BNF / EBNF语法背景)。