Python 是否有与其布尔运算符相对应的增强赋值语句?
例如我可以这样写:
x = x + 1
或这个:
x += 1
有什么我可以写的吗:
x = x and y
为了避免两次写“x”?
请注意,我知道使用 &= 的语句,但我一直在寻找一种适用于 y 是任何类型的语句,而不仅仅是当 y 是布尔值时。
Python 是否有与其布尔运算符相对应的增强赋值语句?
例如我可以这样写:
x = x + 1
或这个:
x += 1
有什么我可以写的吗:
x = x and y
为了避免两次写“x”?
请注意,我知道使用 &= 的语句,但我一直在寻找一种适用于 y 是任何类型的语句,而不仅仅是当 y 是布尔值时。
等效表达式是&=
forand
和|=
for or
。
>>> b = True
>>> b &= False
>>> b
False
注意bitwise AND
and bitwise OR
and 仅适用于bool
类型(如您所料)。bitwise AND
不同于logical AND
其他类型,例如数字
>>> bool(12) and bool(5) # logical AND
True
>>> 12 & 5 # bitwise AND
4
请参阅这篇文章,以更深入地讨论此上下文中的按位与逻辑运算。
存在增强分配以使可变的左手操作数有机会就地更改对象,而不是创建新对象。另一方面,布尔运算符不能转换为就地操作;x = x and y
你要么重新绑定x
到,要么重新x
绑定到y
,但x
它本身不会改变。
因此,x and= y
实际上会很混乱;要么x
保持不变,要么被y
.
除非您有实际的布尔对象,否则不要对位运算符使用&=
和|=
扩充的赋值。只有对于布尔对象(so和),这些运算符才被重载以产生与and运算符相同的输出。对于其他类型,它们要么导致,要么应用完全不同的操作。对于整数,这是按位运算,设置重载它以进行交集。True
False
and
or
TypeError