为什么两个值上的 and 运算符给出最后一个值?
我一直在对 Python 运算符进行一些修改,但遇到了一些我不确定的事情。
如果我对 2 个整数执行按位运算 (&, |) ,我将毫不奇怪地得到它们的按位值
。意义:
>>> a = 11
>>> b = 3
>>> a & b
3
这是因为按位和执行和对这些数字的二进制表示。但是,如果我使用内置的 and 运算符,我将获得第二个变量,而不管它是什么类型:
>>> b and a
11
>>> 'b' and 'a'
'a'
为什么会这样?
回答
逻辑运算符对对象的真实性进行操作。每个对象都有真值,除非它有一个__bool__被显式覆盖以引发错误的方法。a and b(logical) 和a & b(bitwise)之间的主要区别在于,前者适用于任何对象,而后者仅适用于支持按位运算的数字类型。
Python 的逻辑运算符专门用于返回最后一个评估对象的结果:
-
a and b: 返回一个 Falsya,或者b(如果a是真的) -
a or b: 返回一个 Truthya,或b(a如果为假)
从教程:
此属性半惯用地用于在访问值之前检查值。例如,如果列表必须包含一个元素,您可以执行以下操作
if x and x[0] == value:
# ...
这不会引发错误,因为如果x是 Falsy(空),则and表达式将返回x而不是x[0] == value。