Python 布尔运算符的增强赋值
Python 有没有对应于布尔运算符的增强赋值语句?
比如我可以这样写:
x = x + 1
或者这样:
x += 1
有没有什么可以替代这个的:
x = x and y
这样就不用写 "x" 两次了?
我知道可以用 &= 的写法,但我想要的是一种可以在 y 是任何类型的时候都能用的写法,而不仅仅是 y 是布尔值的时候。
2 个回答
4
等价的表达式是 &=
用于 and
,而 |=
用于 or
。
>>> b = True
>>> b &= False
>>> b
False
请注意,位与运算
和 位或运算
只会对 布尔类型
(也就是真或假)按你预期的方式工作。位与运算
和其他类型(比如数字)的 逻辑与运算
是不同的。
>>> bool(12) and bool(5) # logical AND
True
>>> 12 & 5 # bitwise AND
4
想了解更多关于位运算和逻辑运算的区别,可以查看 这篇文章。
2
不,布尔运算符没有增强赋值运算符。
增强赋值运算符的存在是为了让可变的左边操作数有机会直接修改对象,而不是创建一个新对象。可是,布尔运算符不能进行这种直接操作;比如说在 x = x and y
这个表达式中,你要么把 x
重新绑定到 x
,要么把它重新绑定到 y
,但 x
本身是不会改变的。
所以,x and= y
其实会让人很困惑;要么 x
不变,要么被 y
替代。
除非你真的在使用布尔对象,否则不要使用 &=
和 |=
这样的增强赋值运算符来处理 位运算运算符。只有在布尔对象(也就是 True
和 False
)的情况下,这些运算符才会被重载,产生和 and
和 or
一样的结果。对于其他类型,它们要么会导致 TypeError
错误,要么会执行完全不同的操作。比如对于整数来说,这就是位运算,而对于集合来说,它会被重载为求交集。