&=
运算符在Python中是什么意思,您能给我一个有效的例子吗?
I am trying to understand the __iand__
operator.
我只是不知道__iand__
是什么意思,并且已经在网上查看但找不到它。
无法理解,对此您找不到太多参考。 &=
I find it hard to get references on this too, but they exist.中的i
表示就地,因此它是iand
的就地运算符。如果已实现,则&
调用&=
运算符。如果未实现,则与__iand__
相同。
主要用于更新内置集合类型的交集:
x = x & y
与以下相同:
>>> a = set('abc')
>>> a &= set('cbe')
>>> a
set(['c', 'b'])
它非常类似于调用>>> a = set('abc')
>>> a.__iand__(set('cbe'))
set(['c', 'b'])
方法,并且将在控制流中使用,因为您将就地更新任何对象或变量(如果对象是不可变的。)]
较不常用的不变冻结集对象将在就地更新时替换在内存中,并且变量名称将指向内存中的新对象。
set.intersection_update
在这种情况下,因为 Frozenset没有实现>>> a = frozenset('abc')
>>> a &= set('bce')
>>> a
frozenset({'c', 'b'})
方法,
__iand__
它几乎(*几乎相同)>>到
,因为如果您检查字节码,您将看到底层实现将集合和冻结集合视为相同,即使冻结集合没有>>> a = frozenset('abc') >>> a.__iand__(set('cbe')) Traceback (most recent call last): File "<pyshell#160>", line 1, in <module> a = frozenset('abc'); a.__iand__(set('cbe')) AttributeError: 'frozenset' object has no attribute '__iand__'
*(我说nearly
a = a & set('bce')
,集合也没有,因为每个至少对于编译后的函数调用__iand__
。]类似于集合,我们可以使用INPLACE_AND
更新二进制选项标志的交集,其中&=
的值为True
。下面,我们证明二进制数1
和binary AND的“ 1110
”(类似于交集)是1011
:
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
是[a &= b
的简写,尽管我承认它对于内置的不可变类型(例如整数)的表现通常相似。