|=(管道等号)在Python中有什么作用?

问题描述 投票:0回答:4

我在项目中看到一段代码,其中写有以下内容:

 move = Move.create({
    'name': repair.name,
    'product_id': repair.product_id.id,
    'product_uom': repair.product_uom.id or repair.product_id.uom_id.id,
    'product_uom_qty': repair.product_qty,
    'partner_id': repair.address_id.id,
    'location_id': repair.location_id.id,
    'location_dest_id': repair.location_dest_id.id,
    'restrict_lot_id': repair.lot_id.id,
})
moves |= move
moves.action_done()

这里的

|=
是什么意思?

python python-2.7 odoo odoo-8 odoo-9
4个回答
15
投票

这是一个复合运算符,当你说:

x |= y
时,它相当于
x = x | y

|
运算符的意思是
bitwise or
,它对整数进行逐位操作,下面是一个示例:

a = 3    #                (011)
         #                 |||
b = 4    #                (100)
         #                 |||
a |= b   #<-- a is now 7  (111)

另一个例子:

a = 2    #                (10)
         #                 ||
b = 2    #                (10)
         #                 ||
a |= b   #<-- a is now 2  (10)

因此,如果在两个源中的任何一个中设置了相同的位,则结果中的每个位都将被设置;如果两个源中的该位都为零,则结果中的每个位都将被设置。

管道也用于集合来获取并集:

a = {1,2,3}
b = {2,3,4}
c = {4,5,6}
print(a | b | c)  # <--- {1, 2, 3, 4, 5, 6}

9
投票

正如 @AChampion 在第一个问题评论中已经提到的,它可以是“按位或”或“集合并”。虽然这个问题以 Odoo 作为上下文,但它是 Odoo 类的“集合并”

RecordSet

对于您的示例:它与

moves = moves | move
相同,表示
moves
move
的并集。

此类是通过 Odoo 8 上的新 API 引入的。对于其他运算符,请查看 Odoo 的官方文档。


0
投票

除了其他人指出的含义之外,从 Python 3.9 开始

my_dict |= another_dict
意味着获取
another_dict
中的条目并将它们添加到
my_dict
,覆盖任何重复项。

或者如文档所述(搜索

|=
并确保您正在查看
dict
下的而不是
set
下的那个):

d |= 其他

使用其他字典的键和值更新字典 d,字典 d 可以是键/值对的映射或可迭代。当 d 和 other 共享键时,other 的值优先。


-1
投票

它只是意味着

moves = move | moves

© www.soinside.com 2019 - 2024. All rights reserved.