我遇到了这段代码:
def myzip(*args):
iters = map(iter, args)
while iters:
res = [next(i) for i in iters]
yield tuple(res)
Run Code Online (Sandbox Code Playgroud)
我不确定:
while iters我怎么努力工作:
x=[1,2]
x=iter(x)
if x:
print("Still True")
next(x)
next(x)
if x:
print("Still True")
Run Code Online (Sandbox Code Playgroud)它仍然"Still True"在两种情况下打印.
该代码的作者还说因为map在3.X中返回"一次性迭代"并且"一旦我们在循环内运行列表理解一次,它们将用尽但仍然是真的(并且res将是[])永远".list(map(iters, args)如果我们使用3.X,他建议使用.
我不确定这种变化实际上如何帮助它工作,因为我认为即使迭代器StopIteration仍然存在True(基于我之前尝试过的).
编辑:
作者以此为例
>>> list(myzip('abc', 'lmnop'))
[('a', 'l'), ('b', 'm'), ('c', 'n')]
Run Code Online (Sandbox Code Playgroud)