Python 中的 |= 就地或运算符

目录

The |= in-place OR operator in Python

  1. |= 就地 OR 运算符与 Set 对象
  2. |= 就地 OR 运算符与字典
  3. |= 就地 OR 运算符与数字

|= 就地 OR 运算符与 Set 对象

当与set对象一起使用时,就地 |= OR 运算符用于将 a 重新分配set给 2 个集合的并集,例如set_1 |= set_2. |= 运算符等同于set_1 = set_1 | set_2.

main.py
set_1 = {'bobby'} set_2 = {'hadz'} # 👇️ reassign my_set to the union of my_set and my_set_2 set_1 |= set_2 print(set_1) # 👉️ {'bobby', 'hadz'}
两个set对象的联合是最小的set ,它包含两个set对象的元素。

运算符是的a |= b简写a = a | b

main.py
set_1 = {'bobby'} set_2 = {'hadz'} set_1 = set_1 | set_2 print(set_1) # 👉️ {'bobby', 'hadz'}

在这两种情况下,我们都将set_1变量重新分配给 和 的set_1
set_2

但是,您可以在不进行就地重新分配的情况下使用 OR (|) 运算符

main.py
set_1 = {'bobby'} set_2 = {'hadz'} print(set_1 | set_2) # 👉️ {'bobby', 'hadz'}

而您只能将就地或 (|=) 运算符与就地重新分配一起使用。

main.py
set_1 = {'bobby'} set_2 = {'hadz'} set_1 |= set_2 print(set_1) # 👉️ {'bobby', 'hadz'}

您还可以在同一语句中使用就地或 (|=) 和或 (|) 运算符。

main.py
set_1 = {'bobby'} set_2 = {'hadz'} set_3 = {'com'} set_1 |= set_2 | set_3 print(set_1) # 👉️ {'com', 'bobby', 'hadz'} print(set_2) # 👉️ {'hadz'} print(set_3) # 👉️ {'com'}

set_1变量被重新分配给 3 个set对象的联合。

其他 2 个set对象保持不变。

|= 就地 OR 运算符与字典

当与两个字典一起使用时,就地 |= OR 运算符通过合并两个字典来重新分配变量。如果一个键出现在两个字典中,则右侧操作数的值获胜。

main.py
dict_1 = {'a': 1, 'b': 2} dict_2 = {'a': 10, 'c': 30} # 👇️ reassign dict_1 by merging it with dict_2 dict_1 |= dict_2 print(dict_1) # 👉️ {'a': 10, 'b': 2, 'c': 30}

请注意,键a在两个字典中都存在,因此右操作数中键的值优先。

dict_1 |= dict_2语句是 的简写dict_1 = dict_1 | dict_2

main.py
dict_1 = {'a': 1, 'b': 2} dict_2 = {'a': 10, 'c': 30} dict_1 = dict_1 | dict_2 print(dict_1) # 👉️ {'a': 10, 'b': 2, 'c': 30}

|算子称为
字典合并
算子,该
|=算子称为字典更新算子。

|可以在不重新分配变量的情况下使用字典合并运算符。

main.py
dict_1 = {'a': 1, 'b': 2} dict_2 = {'a': 10, 'c': 30} print(dict_1 | dict_2) # 👉️ {'a': 10, 'b': 2, 'c': 30}

而字典更新|=运算符只能与就地重新分配一起使用。

main.py
dict_1 = {'a': 1, 'b': 2} dict_2 = {'a': 10, 'c': 30} dict_1 |= dict_2 print(dict_1) # 👉️ {'a': 10, 'b': 2, 'c': 30}

|and|=运算符是在 Python 3.9 中添加的这是
官方提案的链接。

您还可以
在单​​个语句中使用字典更新
|和字典合并运算符。|=

main.py
dict_1 = {'a': 1, 'b': 2} dict_2 = {'a': 10, 'c': 30} dict_3 = {'a': 100, 'd': 40, 'e': 50} dict_1 |= dict_2 | dict_3 print(dict_1) # 👉️ {'a': 100, 'b': 2, 'c': 30, 'd': 40, 'e': 50}

通过保留最右边的值来解决键冲突。

|= 就地 OR 运算符与数字

当与数字一起使用时,就地|=按位或运算符用于进行二进制数学运算。该语句num1 =| num2等效于
num1 = num1 | num2.

main.py
num_1 = 3 # 👉️ (binary = 011) num_2 = 4 # 👉️ (binary = 100) num_1 |= num_2 print(num_1) # 👉 7️ (binary = 111)
按位或|运算符执行“按位或”。0如果 和 的对应位是X则输出的每一位,否则是 Y01

|=运算符就地重新分配变量的值

您也可以使用长格式语法来获得相同的结果。

main.py
num_1 = 3 # 👉️ (binary = 011) num_2 = 4 # 👉️ (binary = 100) num_1 = num_1 | num_2 print(num_1) # 👉 7️ (binary = 111)

如果在两个数字中的任何一个中设置了相应的位,则结果中的每一位都被设置,否则该位为0