|=(管道等号)符号在python中做啥?

Posted

技术标签:

【中文标题】|=(管道等号)符号在python中做啥?【英文标题】:What does |= (pipe equal) sign do in python?|=(管道等号)符号在python中做什么? 【发布时间】:2017-03-08 08:10:34 【问题描述】:

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

 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()

|= 在这里是什么意思?

【问题讨论】:

无论moves 的类型决定它做什么,它都会做。它通常表示“按位或”或“设置联合”并赋值,一般应相当于moves = moves | move 看起来像 set union operator。大概Move 类重载了它以允许Move 类型的操作数 仅供参考:set 现在是内置类型:docs.python.org/2/library/stdtypes.html#set 我不确定这个类是如何与这个操作符交互的。谢谢罗伯。 @AChampion 感谢您提供的信息。我正在尝试关注那些运营商。 :) 【参考方案1】:

这是一个复合运算符,当你说: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

【讨论】:

【参考方案2】:

它只是意味着moves = move | moves

【讨论】:

您能否进一步解释一下,以便其他人可以从您的回答中学习?【参考方案3】:

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

这个类是在 Odoo 8 的新 API 中引入的。对于其他操作员,请查看 Odoo 的官方文档。

【讨论】:

以上是关于|=(管道等号)符号在python中做啥?的主要内容,如果未能解决你的问题,请参考以下文章

<!-- 在Javascript中做啥?

@符号在iPython / Python中做了啥[重复]

python中&符号、字母字符和等号的正则表达式

++ 运算符在 Python 中做啥? [复制]

第五课 运算符号

如何理解 IMAP 电子邮件文本中的等号“=”符号?