Python中的垂直条按位赋值运算符

时间:2014-01-20 20:42:51

标签: python python-2.7 operators

有一个代码和类'方法有一行:

object.attribute |= variable

我无法理解它的含义。我没有在基本Python运算符列表中找到(| =)。

4 个答案:

答案 0 :(得分:18)

这是bitwise or的作业。它相当于

object.attribute = object.attribute | variable

阅读more here

答案 1 :(得分:7)

在python中,|是调用对象的__or__方法的简称,如here in the docs和此代码示例所示:

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

让我们看看使用|运算符与此通用对象时会发生什么。

In [62]: o = Object()

In [63]: o | o
using __or__

正如您所看到的,调用了__or__方法。 int,'设置',' bool'所有人都有__or__的实施。对于数字和bool,它是一个按位OR。对于集合,它是一个联盟。因此,根据属性或变量的类型,行为将有所不同。许多按位运算符都设置了等价物see more here

答案 2 :(得分:4)

我应该添加" bar-equals"现在(在2018年)最常用作set-union运算符,如果它们尚未存在,则将元素附加到集合中。

>>> 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']}
...

答案 3 :(得分:0)

对于一个整数,这将对应于Python"按位或"方法。所以在下面的例子中我们采用bitwise或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

更一般化(正如亚历杭德罗所说)是调用对象的方法,可以为以下形式的类定义:

def __or__(self, other):
    # your logic here
    pass

因此,在整数的特定情况下,我们调用方法,该方法解析为按位或按Python定义。