python中的“|=”是什么?
我无法理解|=部分。 下面是使用此运算符的代码的示例python中的“|=”是什么?,python,Python,我无法理解|=部分。 下面是使用此运算符的代码的示例 affected_files |= set(modified_file_dict.keys()) 如文件中所述: s、 updatet update s |=t-返回从t添加元素的集s 是|,意思是或 因此,当你做a |=诸如此类的事情时,它就是在做a=诸如此类的事情 在你的例子中,当你把它和集合一起使用时,它得到了两个集合的并集,也就是说,一个集合或另一个集合中有什么 因此,对于受影响的_文件|=setmodified_file_dict
affected_files |= set(modified_file_dict.keys())
如文件中所述:
s、 updatet update s |=t-返回从t添加元素的集s
是|,意思是或
因此,当你做a |=诸如此类的事情时,它就是在做a=诸如此类的事情 在你的例子中,当你把它和集合一起使用时,它得到了两个集合的并集,也就是说,一个集合或另一个集合中有什么
因此,对于受影响的_文件|=setmodified_file_dict.keys,受影响的_文件将包含两个集合中的项。最终要做的是创建集合a和集合b的并集 然而,需要指出的是,两者之间存在微妙的区别
a = a | b
及
第一行调用一个
__否则_uu将返回一个新集__ior__u;将使用b中的元素就地更新a。考虑下面的示例,其中自定义类将一些打印语句添加到所涉及的方法:
>>> class MySet(set):
... def __or__(self, other):
... print('calling __or__')
... return super(MySet, self).__or__(other)
... def __ior__(self, other):
... print('calling __ior__')
... return super(MySet, self).__ior__(other)
...
>>> a = MySet({1,2})
>>> b = {3}
>>> c = a
>>>
>>> a = a | b # build new set from the union of a and b, reassign name a
calling __or__
>>> a
{1, 2, 3}
>>> c
MySet({1, 2})
在这个例子中,c仍然是集合{1,2}
在本例中,c也发生了变异,因为a和c从未停止成为同一集合的名称
因此,当您执行a |=b时,要记住的一点是,在名称为a的集合的所有名称中都会看到更改
运算符|是OR位运算符,因此,例如,让我们取2 | 4
二进制中2=10,二进制中4=100。所以2或4是一点一点的或
换句话说:010或100=110=6(十进制)
So 2 | 4=6
如果应用于变量,a=a | b就像键入a |=b一样,对于相同的操作,键入的时间更短
希望这有帮助:-请将代码添加到您的问题中。这看起来像是OR操作和assignment操作的组合。即,1个二进制或受影响的_文件的值,以及setmodified_file_dict.keys的结果。2将结果分配给受影响的|文件|=为C/C++或等于,x=x | y与x |=相同y@rresol这些答案有用吗?是的@ReutSharabani的是我要找的。他在他的链接中指的是这一行:受影响的文件=setmodified的文件。keys@ReutSharabani同样的逻辑也适用。受影响的|u文件包含受影响的|u文件或集合中的内容。为保持一致性和最少惊讶,可能是相同的逻辑,但它不是按位运算符。因此,当您执行a |=blah时,它执行a=a | blah,运算符的名称为按位或,只是uuu或uuu和uuuu ior_uuuu函数覆盖了集合。谢谢@ReutSharabania=a | b就像键入a |=b一样,我只考虑了整数之类的样本变量。你说得对
a |= b
>>> class MySet(set):
... def __or__(self, other):
... print('calling __or__')
... return super(MySet, self).__or__(other)
... def __ior__(self, other):
... print('calling __ior__')
... return super(MySet, self).__ior__(other)
...
>>> a = MySet({1,2})
>>> b = {3}
>>> c = a
>>>
>>> a = a | b # build new set from the union of a and b, reassign name a
calling __or__
>>> a
{1, 2, 3}
>>> c
MySet({1, 2})
>>> a = MySet({1,2})
>>> b = {3}
>>> c = a
>>>
>>> a |= b # update a
calling __ior__
>>> a
MySet({1, 2, 3})
>>> c
MySet({1, 2, 3})