Python dict.keys()上的`或`运算符

Python dict.keys()上的`或`运算符,python,python-3.x,python-3.5,Python,Python 3.x,Python 3.5,因为我一直找不到关于这个的任何文档,所以我会在这里询问 如下面的代码所示,我发现或操作符(|)的工作原理如下: a = {"a": 1,"b": 2, 2: 3} b = {"d": 10, "e": 11, 11: 12} keys = a.keys() | b.keys() aonce = a.keys() | a.values() bonce = b.keys() | b.values() for i in keys: print(i, end=" ") print() for

因为我一直找不到关于这个的任何文档,所以我会在这里询问

如下面的代码所示,我发现
操作符(
|
)的工作原理如下:

a = {"a": 1,"b": 2, 2: 3}
b = {"d": 10, "e": 11, 11: 12}

keys = a.keys() | b.keys()
aonce = a.keys() | a.values()
bonce = b.keys() | b.values()

for i in keys:
    print(i, end=" ")
print()
for i in aonce:
    print(i, end=" ")
print()
for i in bonce:
    print(i, end=" ")
print()
以某种顺序产生结果:

2 d 11 a b e   
3 1 2 a b   
10 e 11 12 d   
起初,我假设这些iterable与
|
兼容,但与集合的方式类似。使用其他iterable(如
列表)进行测试时抛出错误。均匀

values = a.values() | b.values()
for i in values:
    print(i, end=" ") 
print()
由于在前面的示例中使用了
dict.values()
,因此我假设它是有效的,并抛出了一个错误

所以我的问题是,;我到底遇到了什么,更重要的是,它有多可靠?我的参数需要是什么子类才能使用它?

注意
dict.keys
方法的设置和实现类似

请注意,
dict.values
的设置与不同,即使在您的示例中可能是这样:

aonce = a.keys() | a.values()
bonce = b.keys() | b.values()
然而,它们利用了这样一个事实,即keys视图在任意iterables上实现了
\uuuuuu或
(和
\uuuu ror\uuuuuu

例如,以下操作将不起作用:

>>> a.values() | b.values()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for |: 'dict_values' and 'dict_values'
>>a.值()| b.值()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:|“dict_值”和“dict_值”的操作数类型不受支持