我无法理解|=
部分。
以下是使用此运算符的代码的link。
affected_files |= set(modified_file_dict.keys())
答案 0 :(得分:4)
这是set update,如文档中所述:
添加的元素的集合
s.update(t)
更新s |= t
- 返回带有从t
答案 1 :(得分:0)
它是bitwise operator |
,意思是OR
。
因此,当您执行a |= blah
时,它正在执行a = a | blah
。
>>> a = False
>>> a |= True
>>> a
True
在你的情况下,当你将它与集合一起使用时,它会得到两个集合的并集(即,集合中的集合或另一集合)。
因此,对于affected_files |= set(modified_file_dict.keys())
,affected_files
将包含两个集合中的项目。
答案 2 :(得分:0)
您最终要做的是创建集合package main
import (
"fmt"
"os"
"log"
"bufio"
)
func main() {
file, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() { // internally, it advances token based on sperator
fmt.Println(scanner.Text()) // token in unicode-char
fmt.Println(scanner.Bytes()) // token in bytes
}
}
和a
的联合。
然而,需要指出的是
之间存在微妙的差异b
和
a = a | b
第一行是调用a |= b
,第二行是调用a.__or__
。
a.__ior__
将返回一个新集。 __or__
将使用__ior__
中的元素更新 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})
仍然是集合c
。
{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})
也已发生变异,因为c
和a
从未停止为同一集的名称。
因此,当您执行c
时要记住的是,在名称为a |= b
的集合的所有名称中会看到更改。
答案 3 :(得分:0)
Python refernce on bitwise operators
操作员|是OR位运算符,例如,让我们取2 | 4。
2 =二进制10,二进制4 = 100。所以2 OR 4是逐位或。
换句话说:010 OR 100 = 110 = 6十进制。
所以2 | 4 = 6
如果应用于变量,则a = a | b就像输入| = b,这是同一操作的较短类型。
希望这会有所帮助:-)