用于布尔运算符的python扩充赋值

non*_*gon 5 python augmented-assignment

Python是否具有与其布尔运算符对应的扩充赋值语句?

例如,我可以这样写:

x = x + 1
Run Code Online (Sandbox Code Playgroud)

或这个:

x += 1
Run Code Online (Sandbox Code Playgroud)

有什么我可以写的代替这个:

x = x and y
Run Code Online (Sandbox Code Playgroud)

为避免两次写"x"?

请注意,我知道使用&=的语句,但我正在寻找一个当y是任何类型时都能工作的语句,而不仅仅是当y是布尔值时.

Mar*_*ers 2

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

增强赋值的存在是为了让可变的左侧操作数有机会就地更改对象,而不是创建新对象。另一方面,布尔运算符不能转换为就地运算;因为x = x and y您要么重新绑定xx,要么将其重新绑定到y,但x 其本身不会改变。

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

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