解释
iand中的i意味着in-place,因此它是&的在位运算符。^{{cd4>如果实现了x = x & y相同。在
内置示例,集合:
它主要用于更新内置集合类型的交集:>>> a = set('abc')
>>> a &= set('cbe')
>>> a
set(['c', 'b'])
这与:
^{pr2}$
它非常类似于调用set.intersection_update方法,并将在控制流中使用,就像对任何对象或变量进行就地更新一样(如果对象是不可变的)。在
未实现的内置示例
不太常用的不可变冻结集对象将在就地更新时在内存中被替换,变量名将指向内存中的新对象。在>>> a = frozenset('abc')
>>> a &= set('bce')
>>> a
frozenset({'c', 'b'})
在本例中,因为frozenset没有实现__iand__方法>>> a = frozenset('abc')
>>> a.__iand__(set('cbe'))
Traceback (most recent call last):
File "", line 1, in
a = frozenset('abc'); a.__iand__(set('cbe'))
AttributeError: 'frozenset' object has no attribute '__iand__'
它与a = a & set('bce')
*(我说几乎是,因为如果你检查字节码,你会发现底层实现对集合和冻结集的处理是一样的,即使冻结集没有__iand__,而集合有,因为至少对于编译的函数来说,每次调用INPLACE_AND。)
内置示例,二进制标志:
与集合类似,我们可以使用&=来更新二进制选项标志的交集,其中True的值是1。下面,我们证明二进制数1110和{}的“binary AND”(类似于交集)是1010:>>> option_flags = int('1110', 2)
>>> option_flags
14
>>> option_flags &= int('1011', 2)
>>> option_flags
10
>>> bin(option_flags)
'0b1010'
由于int对象是不可变的,就像frozenset示例一样,这实际上只会将变量option_flags重新分配给新计算的值。在