| =(ior)在Python中做什么?
Google不允许我进行搜索,|=
因此我在查找相关文档时遇到了麻烦。有人知道吗
-
|=
在成对的对象之间执行 就地 +操作。尤其是:在大多数情况下,它与
|
操作员有关。请参阅下面的示例。套装
例如,两个分配的集合的
s1
并并s2
共享以下等效表达式:>>> s1 = s1 | s2 # 1 >>> s1 |= s2 # 2 >>> s1.__ior__(s2) # 3
其中的最终值
s1
等于:- 分配的OR操作
- 就地或运算
- 通过特殊方法++进行原位或运算
例
在这里,我们将OR(
|
)和就地OR(|=
)应用于 集合 :>>> s1 = {"a", "b", "c"} >>> s2 = {"d", "e", "f"} >>> # OR, | >>> s1 | s2 {'a', 'b', 'c', 'd', 'e', 'f'} >>> s1 # `s1` is unchanged {'a', 'b', 'c'} >>> # In-place OR, |= >>> s1 |= s2 >>> s1 # `s1` is reassigned {'a', 'b', 'c', 'd', 'e', 'f'}
辞典
在Python 3.9+中,在字典之间提出了新的merge(
|
)和update(|=
)运算符。注意:这些与上述集合运算符不同。两个指定的dict
d1
和之间的给定操作d2
:>>> d1 = d1 | d2 # 1 >>> d1 |= d2 # 2
其中
d1
经由相当于:- 分配的合并权操作
- 就地合并权限(更新)操作;相当于
d1.update(d2)
例
在此,我们将merge(
|
)和update(|=
)应用于 字典 :>>> d1 = {"a": 0, "b": 1, "c": 2} >>> d2 = {"c": 20, "d": 30} >>> # Merge, | >>> d1 | d2 {"a": 0, "b": 1, "c": 20, "d": 30} >>> d1 {"a": 0, "b": 1, "c": 2} >>> # Update, |= >>> d1 |= d2 >>> d1 {"a": 0, "b": 1, "c": 20, "d": 30}
专柜
在
collections.Counter
涉及称为数学数据结构
多集 (MSET)。它基本上是(对象,多重性)键值对的决定。给定两个分配柜台之间的操作
c1
和c2
:>>> c1 = c1 | c2 # 1 >>> c1 |= c2 # 2
其中
c1
经由相当于:- 指定的联合操作
- 就地联合操作
多集的并集包含每个条目的最大重复数。请注意,这与两个集合之间或两个常规字典之间的行为方式不同。
例
在这里,我们将union(
|
)和就地union(|=
)应用于 Counters :import collections as ct >>> c1 = ct.Counter({2: 2, 3: 3}) >>> c2 = ct.Counter({1: 1, 3: 5}) >>> # Union, | >>> c1 | c2 Counter({2: 2, 3: 5, 1: 1}) >>> c1 Counter({2: 2, 3: 3}) >>> # In-place Union, |= >>> c1 |= c2 >>> c1 Counter({2: 2, 3: 5, 1: 1})
号码
最后,您可以进行二进制数学运算。
在两个分配的数字
n1
和之间进行给定的运算n2
:>>> n1 = n1 | n2 # 1 >>> n1 |= n2 # 2
其中
n1
经由相当于:- 分配的按位或运算
- 就地按位或运算
例
在这里,我们将按位OR(
|
)和就位按位OR(|=
)应用于 数字 :>>> n1 = 0 >>> n2 = 1 >>> # Bitwise OR, | >>> n1 | n2 1 >>> n1 0 >>> # In-place Bitwise OR, |= >>> n1 |= n2 >>> n1 1
评论
本节简要回顾一些按位数学。在最简单的情况下,按位或运算会比较两个二进制位。
1
除非两个位均为,否则它将始终返回0
。>>> assert 1 == (1 | 1) == (1 | 0) == (0 | 1) >>> assert 0 == (0 | 0)
现在,我们将这个想法扩展到二进制数之外。给定任意两个整数(缺少小数部分),我们应用按位“或”并得到一个积分结果:
>>> a = 10 >>> b = 16 >>> a | b 26
怎么样?通常,按位运算遵循一些“规则”:
- 内部比较二进制等效项
- 应用操作
- 以给定类型返回结果
让我们将这些规则应用于上面的常规整数。
(1)比较二进制等效项,在这里视为字符串(
0b
表示二进制):>>> bin(a) '0b1010' >>> bin(b) '0b10000'
(2)对每列应用按位或运算(
0
当两者均为时0
,否则1
):01010 10000 ----- 11010
(3)返回给定类型的结果,例如以10为底的十进制数:
>>> int(0b11010) 26
内部二进制比较意味着我们可以将后者应用于任何基数的整数,例如十六进制和八进制:
>>> c = 0xa # 10 >>> d = 0o20 # 16 >>> c | d 26
也可以看看
- 在抽象基类中重载
__ior__()
方法以迭代可迭代对象的示例MutableSet
- R. Hettinger的OrderedSet配方(分别参见第3行和第10行)
- 一对Python的想法线程上为什么要使用
|=
更新一组 - 一个在Python 3潜水的部分B.8 Python的运营商的特殊方法
+就位按位或运算符不能应用于文字;将对象分配给名称。
++特殊方法返回与其对应运算符相同的操作。