cdo*_*nts 18 python boolean operators operator-precedence
我试图猜测哪个运营商具有优先权:( >大于)或==(相等).这是我的实验:
>>> 5 > 4 == 1
False
Run Code Online (Sandbox Code Playgroud)
据我所知,这有两种可能的解决方案.
>>> (5 > 4) == 1
True
>>> 5 > (4 == 1)
True
Run Code Online (Sandbox Code Playgroud)
两者都没有返回False,那么Python的第一个代码是如何解决的?
iCo*_*dez 26
这与操作员链接有关.与C/C++和大多数其他语言不同,Python允许您像在普通数学中一样链接比较运算符.从文档:
比较可以任意链接,例如,
x < y <= z等同于x < y and y <= z,除了y仅评估一次(但在两种情况下z都没有被评估,当x < y发现是假的时).
所以,这个表达式:
5 > 4 == 1
Run Code Online (Sandbox Code Playgroud)
实际上解释为:
5 > 4 and 4 == 1 # Except that 4 is only evaluated once.
Run Code Online (Sandbox Code Playgroud)
变为:
True and False
Run Code Online (Sandbox Code Playgroud)
是的False.
但是,使用括号会更改Python解释比较的方式.这个:
(5 > 4) == 1
Run Code Online (Sandbox Code Playgroud)
变为:
True == 1
Run Code Online (Sandbox Code Playgroud)
这是True(见下文为什么).同样适用于:
5 > (4 == 1)
Run Code Online (Sandbox Code Playgroud)
变为:
5 > False
Run Code Online (Sandbox Code Playgroud)
这也是True.
由于PEP 0285,bool作出的一个子类int,并True == 1同时False == 0:
>>> issubclass(bool, int)
True
>>> True == 1
True
>>> False == 0
True
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |