Python位运算赋值操作符中的竖线是什么意思?

32

有一段代码,在一个类的方法中,有一行代码:

object.attribute |= variable

我不理解它的意思。在Python基本运算符列表中,我没有找到(|=)。

4个回答

32

这是一种带赋值的按位或操作符,等同于

object.attribute = object.attribute | variable

在此阅读更多信息


3
大多数情况下是等效的——这可能会在原地完成,具体取决于对象。 - user2357112

17

我应该补充说明的是,"bar-equals"现在(2018年)最常用作集合并运算符,如果元素尚未存在,则将其附加到集合中。

>>> a = {'a', 'b'}
>>> a
set(['a', 'b'])

>>> b = {'b', 'c'}
>>> b
set(['c', 'b'])

>>> a |= b
>>> a
set(['a', 'c', 'b'])

比如在自然语言处理中,一个用例就是提取多种语言的组合字母表:

alphabet |= {unigram for unigram in texts['en']}
alphabet |= {unigram for unigram in texts['de']}
...

17

在Python中,|是调用对象的__or__方法的缩写,可以在这里的文档和这个代码示例中看到:

class Object(object):
    def __or__(self, other):
        print("Using __or__")

让我们看看在这个通用对象中使用 | 运算符会发生什么。

In [62]: o = Object()

In [63]: o | o
using __or__
正如您所看到的,调用了__or__方法。 int、'set'和'bool'都有__or__的实现。对于数字和布尔值,它是按位或运算。对于集合,它是一个联合。因此,根据属性或变量的类型,行为将不同。许多按位运算符具有集合等效项,在此处查看更多信息

0

对于整数而言,这相当于 Python 的 "按位或" 方法。因此,在下面的示例中,我们取 4 和 1 的按位或运算,得到 5(或者在二进制中为 100 | 001 = 101):

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
    >>> a = 4
    >>> bin(a)
    '0b100'
    >>> a |= 1
    >>> bin(a)
    '0b101'
    >>> a
    5

更加通用的方法(正如Alejandro所说)是调用对象的方法,这可以在类的形式中定义:
def __or__(self, other):
    # your logic here
    pass

所以在整数的特定情况下,我们调用了 or 方法,它解析为 Python 定义的按位或。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接