有一段代码,在一个类的方法中,有一行代码:
object.attribute |= variable
我不理解它的意思。在Python基本运算符列表中,我没有找到(|=)。
有一段代码,在一个类的方法中,有一行代码:
object.attribute |= variable
我不理解它的意思。在Python基本运算符列表中,我没有找到(|=)。
我应该补充说明的是,"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']}
...
在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__
的实现。对于数字和布尔值,它是按位或运算。对于集合,它是一个联合。因此,根据属性或变量的类型,行为将不同。许多按位运算符具有集合等效项,在此处查看更多信息。对于整数而言,这相当于 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
def __or__(self, other):
# your logic here
pass
所以在整数的特定情况下,我们调用了 or 方法,它解析为 Python 定义的按位或。