首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巨蟒中|=的Usecase

巨蟒中|=的Usecase
EN

Stack Overflow用户
提问于 2013-09-18 23:35:31
回答 3查看 1.9K关注 0票数 5

今天,我在代码库中遇到了|=运营商,但我没有意识到这一点,搜索谷歌搜索python "|="对我没有任何帮助。

对以下操作的结果进行测试,结果如下:

代码语言:javascript
复制
>>> 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,如果右侧大于左边,那么它将两者相加在一起,否则它会保持原始值吗?

这个操作符的名称是什么,它的价值是什么?

EN

回答 3

Stack Overflow用户

发布于 2013-09-18 23:51:29

一个用例是,当您需要在多个值上累积时,例如,决定其中一个或多个值是True,还是所有这些值都是False

这里有几个(人为的)例子。

假设你有一个学生名单,谁已经通过或不及格某一学科。如果您需要计算是否有任何学生通过了该科目,您可以编写如下内容:

代码语言:javascript
复制
passed = False

for student in students:
    passed |= student.passed

if passed:
    print("someone passed")
else:
    print("no one passed")

同样,如果网页上有复选框列表,如果选中其中任何复选框,则需要拒绝服务,您可以编写如下内容:

代码语言:javascript
复制
deny = False

for box in boxes:
    deny |= box.checked
票数 2
EN

Stack Overflow用户

发布于 2013-09-18 23:52:32

@Jestin在一条评论中指出,“一个好的用例将用于积累一个位掩码”,但是既然您要求一个用例,我决定给出一个明确的示例,因为我在PyQt中使用了这个构造。PyQt4中的模型必须有一个返回位掩码的flags()方法。我使用了如下代码来有条件地构建适当的位掩码:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-09-18 23:47:37

Jedwards已经回答了这个问题,但是我也会添加一个更通用的答案。

在Python中,如果您看到表单的运算符:

代码语言:javascript
复制
x ¤= y

如果¤是任何标准的二进制运算符-二进制,它需要2个操作符,比如+ - * / & |,它是以下的缩写:

代码语言:javascript
复制
x = x ¤ y

因此,x |= y等同于x = x | y,其中\是“按位或”运算符,就像x += yx = x + y一样,+是加法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18884075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档