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

Olg*_*ga 17 python operators python-2.7

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

object.attribute |= variable
Run Code Online (Sandbox Code Playgroud)

我无法理解这意味着什么.我没有在基本Python运算符列表中找到(| =).

Ell*_*sch 20

这是一项bitwise or任务.它相当于

object.attribute = object.attribute | variable
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多.

  • 大部分是相同的 - 它可能是就地完成的,具体取决于对象. (2认同)

Ale*_*dro 10

在python中,|是调用对象__or__方法的简写,如文档和此代码示例中所示:

class Object(object):
    def __or__(self, other):
        print("Using __or__")
Run Code Online (Sandbox Code Playgroud)

让我们看看当使用|这个通用对象的运算符时会发生什么.

In [62]: o = Object()

In [63]: o | o
using __or__
Run Code Online (Sandbox Code Playgroud)

如您所见,该__or__方法被调用.int,'set','bool'都有实现__or__.对于数字和bool,它是一个按位OR.对于集合,它是一个联盟.因此,根据属性或变量的类型,行为将有所不同.许多按位运算符都设置了等价物,请参见此处.


rus*_*spy 5

我应该补充一下,“ bar-equals”现在(在2018年)最普遍用作集合元素运算符,用于将元素附加到集合(如果尚不存在)。

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

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

>>> a |= b
>>> a
set(['a', 'c', 'b'])
Run Code Online (Sandbox Code Playgroud)

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

alphabet |= {unigram for unigram in texts['en']}
alphabet |= {unigram for unigram in texts['de']}
...
Run Code Online (Sandbox Code Playgroud)