Python3中使用map实现zip函数为何陷入无限循环?
自定义zip函数的无限循环问题
我实现了如下自定义zip函数:
def my_zip(*iterables): iterators = tuple(map(iter, iterables)) while True: yield tuple(map(next, iterators))
调用my_zip时会陷入无限循环,且持续生成空元组。我原本以为代码会触发StopIteration异常终止循环,但用生成器表达式实现的等价函数my_genexp_zip却能正常运行:
def my_genexp_zip(*iterables): iterators = tuple(iter(it) for it in iterables) while True: try: yield tuple(next(it) for it in iterables) except: print("exception caught!") return
想请教两个问题:
- 为什么使用
map的函数不符合预期? - 若这是
map的预期行为,该如何修改my_zip使其与生成器表达式版本的行为一致?
测试代码如下:
print(list(my_genexp_zip(range(5), range(0, 10, 2)))) print(list(my_zip(range(5), range(0, 10, 2))))
内容的提问来源于stack exchange,提问作者Rusty
相关产品推荐
相关产品推荐

