Python是否有对应于其布尔运算符的增强赋值语句?
例如,我可以这样写:
x = x + 1
或者这个:
x += 1
有没有一些可以代替这个的写法呢?
x = x and y
为了避免两次写出“x”?
请注意,我知道使用&=语句,但我正在寻找一条语句,可以在y是任何类型时工作,而不仅仅是当y是布尔类型时。
Python是否有对应于其布尔运算符的增强赋值语句?
例如,我可以这样写:
x = x + 1
x += 1
x = x and y
and
使用 &=
,对于 or
使用 |=
。>>> b = True
>>> b &= False
>>> b
False
请注意,按位与
和按位或
只适用于bool
类型(正如您期望的那样)。对于其他类型,例如数字类型,按位与
与逻辑与
是不同的。
>>> 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
替换。&=
和|=
增强赋值运算符来进行 按位运算符。只有对于布尔对象(即True
和False
),这些运算符被重载以产生与and
和or
运算符相同的输出。对于其他类型,它们将导致TypeError
,或者应用完全不同的操作。对于整数,这是一种按位操作,对于集合,它会重载为执行交集。x=1
,则赋值x+=3
可以运行并重新绑定x
到4
,而不改变原地的数字1
。 - davidedband=
或or=
,因为重新绑定将取决于运算符的结果独立于类型。 - Martijn Pieters+=
不会就地更新左侧对象。但对于列表,它确实会这样做。但对于布尔运算符,它有时会这样做,有时不会。因此,那是完全不同的事情。 - Martijn Pietersint
对象是不可变的;该运算符的存在是为了让可变对象有机会就地修改对象。然而,没有布尔增强运算符与所有这些都没有关系。 - Martijn Pieters
x
或y
,而不能改变由x
引用的对象。 - Martijn Pieters