今天,我在代码库中遇到了|=运营商,但我没有意识到这一点,搜索谷歌搜索python "|="对我没有任何帮助。
对以下操作的结果进行测试,结果如下:
>>> from itertools import combinations
>>> def wtf_is_it(left, right):
>>> orig_left = left
>>> left |= right
>>> return '%s |= %s == %s ' % (orig_left, right, left)
>>> results = [wtf_is_it(l, r) for l, r in combinations(xrange(5), 2)]
>>> print '\n'.join(results)
0 |= 1 == 1
0 |= 2 == 2
0 |= 3 == 3
0 |= 4 == 4
1 |= 0 == 1
1 |= 2 == 3
1 |= 3 == 3
1 |= 4 == 5
2 |= 0 == 2
2 |= 1 == 3
2 |= 3 == 3
2 |= 4 == 6
3 |= 0 == 3
3 |= 1 == 3
3 |= 2 == 3
3 |= 4 == 7
4 |= 0 == 4
4 |= 1 == 5
4 |= 2 == 6
4 |= 3 == 7 看起来它做了一个or,如果右侧大于左边,那么它将两者相加在一起,否则它会保持原始值吗?
这个操作符的名称是什么,它的价值是什么?
发布于 2013-09-18 23:51:29
一个用例是,当您需要在多个值上累积或时,例如,决定其中一个或多个值是True,还是所有这些值都是False。
这里有几个(人为的)例子。
假设你有一个学生名单,谁已经通过或不及格某一学科。如果您需要计算是否有任何学生通过了该科目,您可以编写如下内容:
passed = False
for student in students:
passed |= student.passed
if passed:
print("someone passed")
else:
print("no one passed")同样,如果网页上有复选框列表,如果选中其中任何复选框,则需要拒绝服务,您可以编写如下内容:
deny = False
for box in boxes:
deny |= box.checked发布于 2013-09-18 23:52:32
@Jestin在一条评论中指出,“一个好的用例将用于积累一个位掩码”,但是既然您要求一个用例,我决定给出一个明确的示例,因为我在PyQt中使用了这个构造。PyQt4中的模型必须有一个返回位掩码的flags()方法。我使用了如下代码来有条件地构建适当的位掩码:
def flags(self, index):
if not index.isValid()
return None
f = QtCore.ItemIsEnabled
if index.column() > some_value:
f |= QtCore.Qt.ItemIsSelectable
if some_other_condition:
f |= QtCore.Qt.ItemIsUserCheckable
return f发布于 2013-09-18 23:47:37
Jedwards已经回答了这个问题,但是我也会添加一个更通用的答案。
在Python中,如果您看到表单的运算符:
x ¤= y如果¤是任何标准的二进制运算符-二进制,它需要2个操作符,比如+ - * / & |,它是以下的缩写:
x = x ¤ y因此,x |= y等同于x = x | y,其中\是“按位或”运算符,就像x += y与x = x + y一样,+是加法。
https://stackoverflow.com/questions/18884075
复制相似问题