Pet*_*ood 149 python syntax operator-precedence
当我看到这个问题的答案时,我发现我不明白自己的答案.
我真的不明白这是如何被解析的.为什么第二个示例返回False?
>>> 1 in [1,0] # This is expected
True
>>> 1 in [1,0] == True # This is strange
False
>>> (1 in [1,0]) == True # This is what I wanted it to be
True
>>> 1 in ([1,0] == True) # But it's not just a precedence issue!
# It did not raise an exception on the second example.
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
1 in ([1,0] == True)
TypeError: argument of type 'bool' is not iterable
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.我想我必须遗漏一些非常明显的东西.
我认为这与链接的副本略有不同:
为什么表达式0 <0 == 0在Python中返回False?.
这两个问题都与人类对表达的理解有关.似乎有两种方式(在我看来)评估表达式.当然两者都不正确,但在我的例子中,最后的解释是不可能的.
看着0 < 0 == 0你可以想象每一半被评估并作为表达有意义:
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Run Code Online (Sandbox Code Playgroud)
所以该链接回答了为什么评估False:
>>> 0 < 0 == 0
False
Run Code Online (Sandbox Code Playgroud)
但是我的例子1 in ([1,0] == True)作为一个表达没有意义,所以不是有两个(当然是错误的)可能的解释,只有一个似乎是可能的:
>>> (1 in [1,0]) == True
Run Code Online (Sandbox Code Playgroud)
Sve*_*ach 190
Python实际上在这里应用比较运算符链接.表达式被翻译成
(1 in [1, 0]) and ([1, 0] == True)
Run Code Online (Sandbox Code Playgroud)
这显然是False.
这也适用于像这样的表达式
a < b < c
Run Code Online (Sandbox Code Playgroud)
转化为
(a < b) and (b < c)
Run Code Online (Sandbox Code Playgroud)
(没有评估b两次).
有关更多详细信息,请参阅Python语言文档.
| 归档时间: |
|
| 查看次数: |
4630 次 |
| 最近记录: |