【发布时间】:2023-03-26 23:40:01
【问题描述】:
我刚刚遇到了一个奇怪的 Python (3.7.0) 行为,我不太了解,对我来说似乎是一个错误。我想用生成器创建一个字典,但不知何故,它们都返回相同的值。这是我正在谈论的代码示例:
import itertools
d = {
"a": [-1, 2],
"b": [1, 2],
"c": [20, 20]
}
g = dict()
g2 = dict()
for letter, values in d.items():
g[letter] = (values[0] * values[1] * x for x in itertools.count())
g2[letter] = [values[0] * values[1] * x for x in range(3)]
for i in range(3):
for l, v in g.items():
print(v.__next__())
print(g2)
在我看来,g2 元素和 g 生成器的预期输出是相同的,但是我总是从最新的生成器接收值:
0
0
0
400
400
400
800
800
800
{'a': [0, -2, -4], 'b': [0, 2, 4], 'c': [0, 400, 800]}
总结一下,我做错了什么吗?还是只是标准的 Python 行为?
【问题讨论】:
-
您期望输出什么?同样使用内置的
next,不要显式调用o.__next__。
标签: python python-3.x dictionary itertools