TFF*_*TFF 3 python python-3.x python-3.5
由于我无法找到任何关于此的文档,所以我会问这里.
如下面的代码所示,我发现oroperator(|)工作原理如下:
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()
Run Code Online (Sandbox Code Playgroud)
以某种顺序产生结果:
2 d 11 a b e
3 1 2 a b
10 e 11 12 d
Run Code Online (Sandbox Code Playgroud)
最初,我认为这些迭代是兼容的|,但类似于集合的方式.使用其他可迭代的测试(例如a list.__iter__())会引发错误.甚至;
values = a.values() | b.values()
for i in values:
print(i, end=" ")
print()
Run Code Online (Sandbox Code Playgroud)
由于dict.values()在前面的例子中的使用,我假设工作,因此引发了错误.
所以,我的问题是; 我到底发生了什么,更重要的是,它有多可靠?我的论点需要什么子类,因为我能够使用它?
所述的Python 3文档注意到,dict.keys方法被设置状和器具collections.abc.Set.
请注意,即使在您的示例中可能看起来如此,dict.values也不会像设置一样:
aonce = a.keys() | a.values()
bonce = b.keys() | b.values()
Run Code Online (Sandbox Code Playgroud)
然而,这些正在利用密钥视图实现__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'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |