Jon*_*ang 15 python operator-precedence python-3.x nonetype
在Python3中,
a = b = 3
a is None == b is None
Run Code Online (Sandbox Code Playgroud)
返回False,但是
(a is None) == (b is None)
Run Code Online (Sandbox Code Playgroud)
返回True.所以我假设仅基于这个例子,==优先于is.
然而,
a = b = None
a is None == b is None
Run Code Online (Sandbox Code Playgroud)
返回True.和
(a is None) == (b is None)
Run Code Online (Sandbox Code Playgroud)
返回True.但
a is (None == b) is None
Run Code Online (Sandbox Code Playgroud)
返回False.在这种情况下,它会看起来好像就是有优先==.
再举一个例子,这个表达并不意味着什么,但请耐心等待.如果我说
None is None == None
Run Code Online (Sandbox Code Playgroud)
它返回True.但是以下两个都返回False.
None is (None == None)
(None is None) == None
Run Code Online (Sandbox Code Playgroud)
很明显,Python并没有用一些严格的优先级来评估它们,但是我很困惑发生了什么.如何用2个不同的运算符来评估这个表达式,但是不同于任何一个运算符?
Rem*_*ich 15
你在这里看到的是操作员链接,并没有任何优先权!
Python支持类似的表达式
1 < a < 3
Run Code Online (Sandbox Code Playgroud)
测试一个数字在1到3之间; 这等于(1 < a) and (a < 3)
除了a
只计算一次.
不幸的是,这也意味着,例如
None is None == None
Run Code Online (Sandbox Code Playgroud)
实际意味着
(None is None) and (None == None)
Run Code Online (Sandbox Code Playgroud)
这当然是真的,也是你开始的更长的例子
a = b = 3
a is None == b is None
Run Code Online (Sandbox Code Playgroud)
手段
(a is None) and (None == b) and (b is None)
Run Code Online (Sandbox Code Playgroud)
这只能是True
如果两个a
和b
的None
.
这里有文档,请看有关链接的内容.
有时非常有用但是当你最不期望它时它也会弹出!