什么| =(ior)在Python中做什么?

Sea*_* W. 88 python

谷歌不会让我搜索| =所以我找不到相关文档.有人知道吗?

Dan*_*ach 84

在Python和许多其他编程语言中,|按位OR运算. |=|作为+=被到+,即操作和asignment的组合.

var |= value 是的缩写 var = var | value

  • 你能举个例子吗? (16认同)

小智 45

与sets一起使用时,它执行union操作.


fed*_*qui 32

这只是当前变量和另一个变量之间的OR运算.存在T=TrueF=False,以图形方式查看输出:

r    s    r|=s
--------------
T    T    T
T    F    T
F    T    T
F    F    F
Run Code Online (Sandbox Code Playgroud)

例如:

>>> r=True
>>> r|=False
>>> r
True
>>> r=False
>>> r|=False
>>> r
False
>>> r|=True
>>> r
True
Run Code Online (Sandbox Code Playgroud)

  • 这给操作员带来了一种扭曲的印象; `|`是整数的按位或运算符,不是特定的布尔运算符,对于除bool之外的任何东西,它实际上不会产生'True`或`False`输出.`bool`是`int`的子类,并且很好,他们为`bool`重载它以继续产生'True` /`False`输出,但在大多数情况下,布尔操作应该用`或`来完成,不是`|`."|"的正常用法是按位 - 或者"set-union".更好的使用示例就像`a = 0b1001; a | = 0b0010; print(bin(a))`生成`0b1011`. (4认同)

pyl*_*ang 25

|=执行inplace,按位OR运算,并执行Python集的操作.

例如,两个集合的x并集并y共享以下等效表达式:

>>> x = x | y                                              # (1)
>>> x |= y                                                 # (2)
>>> x.__ior__(y)                                           # (3)
Run Code Online (Sandbox Code Playgroud)

其中最终值x相当于:

  1. 指定的OR运算
  2. 就地或操作
  3. 通过特殊方法进行的原位OR操作

有关Python运算符的特殊方法,请参阅Python 3中Dive的B.8节.


以下是一些比较OR(|)和|=应用于集合的inplace OR()的示例:

>>> x = {"a", "b", "c"}
>>> y = {"d", "e", "f"}

>>> # OR, | 
>>> x | y
{'a', 'b', 'c', 'd', 'e', 'f'}
>>> x                                                      # `x` is unchanged
{'a', 'b', 'c'}

>>> # Inplace OR, |=
>>> x |= y
>>> x                                                      # `x` is reassigned
{'a', 'b', 'c', 'd', 'e', 'f'}
Run Code Online (Sandbox Code Playgroud)

下面是重载__ior__()方法以迭代MutableSet抽象基类中的迭代的示例.在Raymond Hettinger的OrderedSet配方中也可以看到它并进行了细分(见第3和10行).这是关于为什么要用来更新集合的Python想法线程|=.

  • 为了完全清楚起见,我将添加到演示中,在执行常规分配 (x = x | y) 后,id(x) 已更改,因为它是一个新对象,而 |= 保留相同的 id,因为它是原始 x被修改,因此名称为“inplace”。 (3认同)
  • 这应该是最重要的答案 - 它是最详尽的。 (3认同)

Bra*_*des 9

它执行赋值的左侧和右侧的二进制按位OR,然后将结果存储在左侧变量中.

http://docs.python.org/reference/expressions.html#binary-bitwise-operations