由于我无法找到任何相关文档,所以我会在这里问。
如下面的代码所示,我发现or
运算符(|
)的工作原理如下:
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
最初我假设这些迭代与|
兼容,但类似于集合的方式。使用其他可迭代测试(例如list.__iter__()
)会引发错误。甚至;
values = a.values() | b.values()
for i in values:
print(i, end=" ")
print()
由于在前面的示例中使用dict.values()
,我假设工作正常,因此引发了错误。
所以,我的问题是;我到底发生了什么,更重要的是,它有多可靠?我的论点需要什么子类,以便能够使用它?
答案 0 :(得分:5)
Python 3 Documentation注意到dict.keys
方法设置类似并实现了collections.abc.Set
。
请注意,dict.values
未设置类似,即使您的示例中可能看起来如此:
aonce = a.keys() | a.values()
bonce = b.keys() | b.values()
然而,这些正在利用密钥视图在任意迭代上实现__or__
(和__ror__
)的事实。
例如,以下内容不起作用:
>>> 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'