比较运算符给出|的不同值&与或相比 - Python
我对比较运算符感到困惑。例如,比较运算符给出|的不同值&与或相比 - Python
10 or 20 == 20
# output, expected True
10
10 | 20 == 20
(10 | 20) == 20
(10 or 20) == 20
所有3行代码给'假',但我期待'真'。
10 or 20 == 20
# output gives 10, but was expecting True
10
又如:
10 and 20 > 2
# output is as expected
True
(10 and 20) > 2
True
(10 & 20) > 2
# output gives False, but was expecting True
False
最后,如果我这样做:
10 or 20 > 100
#output is 10. No idea why
10
3 or 8 < 200
3
谁能帮助清理这种混乱?非常感谢花时间阅读我的困惑!我正在使用Python 3.6
它类似于真或假的情况下:
>>> 20 or 10
20
>>>(20 or 10) == 10
False
>>>(20 or 10) == 20
True
这是因为它需要为真,下一个为假的第一个值,当你传递true或false你得到真正的同样你获得20实际上在这里代表真实。 希望这有助于。
感谢user8477766。我的问题是,如果每次只使用'=='运算符评估/比较第一个数字,那么看起来几乎毫无意义的做链比较运算符。也许只是'(20)== 10'给出'True'不要让声音卡住,但我个人不喜欢它背后的“逻辑”。似乎并不比'真或假==真'给出'真'。预先知道输出时无意识地运行代码。 – MichaelRSF
@MichaelRSF你的例子似乎毫无意义,因为*它毫无意义*。当您链接比较时,输入*不会被重新评估,这就是为什么a jonrsharpe
这两个条件运算符都会返回他们必须评估的最后一个条件或值。
or
运算符评估这些条件中的任何一个是否为真,并返回它评估的最后一个条件。由于10
在Python(或任何其他语言)中被认为是True
,所以语言甚至不会经过第二个条件(或值)并返回第一个值。而在and
的情况下,两个条件都必须为真,如果两个条件都是真的,则返回第二个值,如果两个条件都不成立,则返回第一个值。
>>> True or False
True
>>> False or True
True
>>> True and False
False
# Similarly
>>> 10 or 20
10
>>> 10 and 20
20
>>> 0 or 10
10
>>> 0 and 10
0
这种行为也提供了一定的b = a if a else c
这种行为的一个方便的选择。
谢谢hspandher,但说实话,我发现逻辑反直觉。我认为说'10或20 == 20'并且期望'真实'而不是10是不合理的。如果只评估第一个数字,那么比较链运算符有什么意义,即'(10或者20或者30)> 15',它给出了“假”而不是“10”。 – MichaelRSF
@MichaelRSF这种行为可能会有一定的负面影响,但通常情况下,这种行为非常方便。我不知道我有多少次使用这个东西作为'if-else'结构的一个方便的替代方法。 – hspandher
只需单独打印每个表达式,然后您就会理解其复合的逻辑。例如'(10或20)'是10,但是“(10 | 20)”是30. – Zefick
'10&20'是按位和',所以'01010&10100'(二进制),确实是'00000'这不高于2 – Rafalon