6

Python 是否有与其布尔运算符相对应的增强赋值语句?

例如我可以这样写:

x = x + 1

或这个:

x += 1

有什么我可以写的吗:

x = x and y

为了避免两次写“x”?

请注意,我知道使用 &= 的语句,但我一直在寻找一种适用于 y 是任何类型的语句,而不仅仅是当 y 是布尔值时。

4

2 回答 2

3

等效表达式是&=forand|=for or

>>> b = True
>>> b &= False
>>> b
False

注意bitwise ANDand bitwise ORand 仅适用于bool类型(如您所料)。bitwise AND不同于logical AND其他类型,例如数字

>>> bool(12) and bool(5)   # logical AND
True

>>> 12 & 5    # bitwise AND
4

请参阅这篇文章,以更深入地讨论此上下文中的按位与逻辑运算。

于 2014-10-16T16:40:40.937 回答
2

不,布尔运算符没有增强的赋值运算符。

存在增强分配以使可变的左手操作数有机会就地更改对象,而不是创建新对象。另一方面,布尔运算符不能转换为就地操作;x = x and y你要么重新绑定x到,要么重新x绑定到y,但x 它本身不会改变。

因此,x and= y实际上会很混乱;要么x保持不变,要么被y.

除非您有实际的布尔对象,否则不要对位运算使用&=|=扩充的赋值。只有对于布尔对象(so和),这些运算符才被重载以产生与and运算符相同的输出。对于其他类型,它们要么导致,要么应用完全不同的操作。对于整数,这是按位运算,设置重载它以进行交集。TrueFalseandorTypeError

于 2014-10-16T21:56:42.667 回答