Python:" |"之间的区别和"或"等式

时间:2017-07-09 00:48:43

标签: python

所有。 我正在运行一个简单的python程序,当我使用followees = self.followee.get(userId, set()) | set([userId])时,我发现它通过了测试。但是,如果我使用followees = self.followee.get(userId, set()) or set([userId]),则表示没有。

所以,显然,这两个算子在方程中存在一些差异。有没有人知道发生了什么?

谢谢!

1 个答案:

答案 0 :(得分:5)

对于集合(这里是你的操作数),|返回两个集合(操作数)的并集,而or运算符返回第一个 truthy 操作数(一个非空集)或最后一个,如果所有操作数都是 falsy - 使or成为一个短路运算符。

请考虑以下示例:

>>> set([1,2,3]) | set([4])
set([1, 2, 3, 4])
>>> set([1,2,3]) or set([4])
set([1, 2, 3])
>>> set([1,2,3]) or set([])
set([1, 2, 3])
>>> set([1,2,3]) | set([])
set([1, 2, 3])

请注意,对于两个操作数,如果至少有一个操作数是 falsy ,则|or都会给出相同的结果。

or的行为对所有对象都是一致的,而|的行为会有所不同,具体取决于操作数如何实现__or____ror__魔术方法,例如充当整数类型的按位,以及collections.Counter对象的 [max-] union