Python a&= b的含义?

问题描述 投票:7回答:4

&=运算符在Python中是什么意思,您能给我一个有效的例子吗?

I am trying to understand the __iand__ operator.

我只是不知道__iand__是什么意思,并且已经在网上查看但找不到它。

python operators ampersand in-place
4个回答
11
投票

说明

无法理解,对此您找不到太多参考。 &=

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。下面,我们证明二进制数1binary 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重新分配给新计算的值。


9
投票

与其他一些答案相反,option_flags是[a &= b的简写,尽管我承认它对于内置的不可变类型(例如整数)的表现通常相似。


5
投票
这是以下简称:

2
投票
© www.soinside.com 2019 - 2024. All rights reserved.