直接用next(nums())调用生成器,只能返回第一个值,而next(it)可以?求解答~ 谢谢各位!

def nums():
    n = 0
    while True:
        n += 1
        yield n

>>> it = nums()
>>> next(it)
    1
>>> next(it)
    2
>>> next(it)
    3    
    
>>> next(nums())
    1
>>> next(nums())
    1 
>>> next(nums())
    1 
阅读 3k
3 个回答

每次调用nums()都会返回一个新的generator对象,next调用完之后就被destory了。而it则始终是同一个

跟楼上说的一样,你每次调用nums()都是重新运行了一遍函数,会从1开始yield出来。

给你举个栗子
假设num()是一个无穷的标签库,
it = nums() 相当于从便签库里面拿一个标签贴到it身上
next(it) 操作的一直都是it,只是因为it被贴了nums()的标签,所以有它的性质,next的时候会返回下一个值。
next(nums()) 操作的是标签库,相当于你每次都拿一个新的标签出来,因此每次返回的就是第一个值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题