Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的“|=”是什么?_Python - Fatal编程技术网

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})