Python a &= b 是啥意思?
Posted
技术标签:
【中文标题】Python a &= b 是啥意思?【英文标题】:Python a &= b meaning?Python a &= b 是什么意思? 【发布时间】:2014-02-09 20:17:00 【问题描述】:&=
运算符在 Python 中是什么意思,你能给我一个工作示例吗?
I am trying to understand the __iand__
operator.
我只是不知道&=
是什么意思,上网查了一下,没找到。
【问题讨论】:
【参考方案1】:说明
可以理解,你找不到太多的参考。 I find it hard to get references on this too, but they exist.
iand
中的i
表示就地,因此它是&
的就地运算符。 &=
调用 __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')
在这种情况下,因为 freezeset 没有实现__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__'
它与
(*几乎)相同a = a & set('bce')
*(我说几乎是因为如果你检查字节码,你会发现底层实现对集合和冻结集合的处理是一样的,即使冻结集合没有__iand__
,并且集合做,因为每个调用INPLACE_AND
,至少对于编译函数。)
内置示例,二进制标志:
与 Sets 类似,我们可以使用 &=
更新二元选项标志的交集,其中 True
的值为 1
。下面,我们证明二进制数1110
和1011
的“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
重新分配给新计算的值。
【讨论】:
【参考方案2】:与其他一些答案相反,a &= b
不是 a = a & b
的简写,尽管我承认它对于像整数这样的内置不可变类型的行为通常类似。
a &= b
可以调用特殊方法__iand__
(如果可用)。要查看差异,让我们定义一个自定义类:
class NewIand(object):
def __init__(self, x):
self.x = x
def __and__(self, other):
return self.x & other.x
def __iand__(self, other):
return 99
之后我们有
>>> a = NewIand(1+2+4)
>>> b = NewIand(4+8+16)
>>> a & b
4
>>> a = a & b
>>> a
4
但是
>>> a = NewIand(1+2+4)
>>> b = NewIand(4+8+16)
>>> a &= b
>>> a
99
【讨论】:
【参考方案3】:它是以下的简写:
a = a & b
如果a
和b
是int
或long
,则&
是bitwise and
。
否则,语句等价于:
a = a.__iand__(b)
如果__iand__
是为a
定义的。
【讨论】:
@JBurnham likea += b
是“a = a + b”的简写。更恰当地说,我会说“像 C# 中的 &=”。【参考方案4】:
它与+=
非常相似。这意味着
a = a & b
【讨论】:
【参考方案5】:简单来说。在引擎盖下,它执行按位二进制操作。
例如二进制中的 5 是 0101 而二进制中的3是0011
现在在它们之间进行“与”运算(当两者均为 1 时结果为 1,否则为 0),您将得到二进制 0001,即十进制中的 1。
x = 5
x &= 3
print(x)
output >>> 1
【讨论】:
以上是关于Python a &= b 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章