所有。
我正在运行一个简单的python程序,当我使用followees = self.followee.get(userId, set()) | set([userId])
时,我发现它通过了测试。但是,如果我使用followees = self.followee.get(userId, set()) or set([userId])
,则表示没有。
所以,显然,这两个算子在方程中存在一些差异。有没有人知道发生了什么?
谢谢!
答案 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 。