小编Dan*_*Dan的帖子

迭代器作为布尔语句?

我遇到了这段代码:

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)

我不确定:

  • 为什么列表理解不需要捕获StopIteration
  • 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)

python python-2.7 python-3.x

6
推荐指数
1
解决办法
728
查看次数

标签 统计

python ×1

python-2.7 ×1

python-3.x ×1