【发布时间】:2014-11-07 16:43:02
【问题描述】:
如果我在函数生成的值上使用list 和for,为什么会报告不同的结果?
from collections import deque
def neighbours(comp0, cand0):
comp = deque([i for i in comp0])
cand = deque([i for i in cand0])
for i in range(len(cand)):
elem = cand.popleft()
comp.append(elem)
yield comp, cand
comp.pop()
cand.append(elem)
return
>>> n = neighbours([2], [1,4,5])
>>> list(n)
[(deque([2]), deque([1, 4, 5])), (deque([2]), deque([1, 4, 5])), (deque([2]), deque([1, 4, 5]))]
>>> n = neighbours([2], [1,4,5])
>>> for i in n:
... print(i)
...
(deque([2, 1]), deque([4, 5]))
(deque([2, 4]), deque([5, 1]))
(deque([2, 5]), deque([1, 4]))
>>>
【问题讨论】:
-
您返回稍后修改的对象。不同之处不在于迭代方法,而在于您在生成值时或在全部生成值之后打印。