声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!
生成器是单迭代器对象,只支持一次迭代。如果你手动地使用多个迭代器来迭代结果流,它们将会指向相同的位置。
>>>G = (c * 4 for c in 'SPAM') # Make a new generator
>>>I1 = iter(G) # Iterate manually
>>>next(I1)
'SSSS'
>>>next(I1)
'PPPP'
>>>I2 = iter(G) # Second iterator at same position!
>>>next(I2)
'AAAA'
此外,一旦任何迭代器运行到完成,所有的迭代器都将用尽。
>>>list(I1) # Collect the rest of I1's items
['MMMM']
>>>next(I2) # Other iterators exhausted too
StopIteration
>>>I3 = iter(G) # Ditto for new iterators
>>>next(I3)
StopIteration
>>>I3 = iter(c * 4 for c in 'SPAM') # New generator to start over
>>>next(I3)
'SSSS'
对于生成器函数来说,也是如此,如下的基于语句的def等价形式只支持一个生成器并且在一次迭代之后用尽。
>>>def timesfour(S):
... for c in S:
... yield c * 4
...
>>>G = timesfour('spam') # Generator functions work the same way
>>>iter(G) is G
True
>>>I1,I2 = iter(G),iter(G)
>>>next(I1)
'ssss'
>>>next(I1)
'pppp'
>>>next(I2) # I2 at same position as I1
'aaaa'
这与某些内置类型的行为不同,它们支持多个迭代器并且在一个迭代器中反映它们的原处修改。
>>>L = [1,2,3,4]
>>>I1,I2 = iter(L),iter(L)
>>>next(I1)
1
>>>next(I1)
2
>>>next(I2) # Lists support multiple iterators
1
>>>del L[2:] # Changes reflected in iterators
>>>next(I1)
StopIteration
点赞,收藏,谢谢!