代码出自Learning python P514,
# return a generator
def myzip(*args):
iters = map(iter, args) # return a list in python2.6
while iters: # return a map in python3.0
res = [next(i) for i in iters]
yield tuple(res)
在python2.6中, map返回的是一个list, 因此可以通过next(i)遍历iters,
当iters遍历结束时, 触发StopIteration异常, while循环退出, 程序不会无限执行.
在python3.0中, map返回的是一个map对象, 结果就完全不同了, 且while会变成死循环.
In [17]: iters=map(iter,([1,2],[3,4]))
In [18]: iters
Out[18]: <map at 0x7f96a56e7c50>
In [19]: res=[next(i) for i in iters];res
Out[19]: [1, 3]
In [20]: res=[next(i) for i in iters];res
Out[20]: []
In [21]: res=[next(i) for i in iters];res
Out[21]: []
请问为什么在python 3.0中对map对象进行列表解析, 后续返回的都是 []
?
尚方宝剑之说
偶然的你
相关分类