#可迭代对象,方法是否包含‘__iter__‘
s=‘ashh‘ print(‘__next__‘ in dir(s)) #False
#可迭代器,方法是否包含‘__iter__‘ and ‘__next__‘
with open(‘文件‘,encoding=‘utf-8‘,mode=‘w‘) as f1: print(‘__iter__‘ in dir(f1) and (‘__next__‘ in dir(f1))) #True
##可迭代对象不能直接取值,迭代器可取值。
##可迭代对象可以转成迭代器
obj=s.__iter__() #obj=iter(s)一样的 print(obj.__next__()) #a print(obj.__next__()) #s print(obj.__next__()) #h aa=[11,33,55] obj1=iter(aa) print(next(obj1)) #11
##优点:节省内存 ##迭代器可以记住上次循环的位置 obj2=iter(aa) for i in aa: print(next(obj2)) i+=1 ##缺点速度慢 s=0 while s>1: try: print(next(obj2)) except StopIteration: break s+=1 def func(): yield 3 yield 4 ret=func() print(next(ret)) #3 一个next对应一个yield print(next(ret)) #4 ##yield将列表编程迭代器 def func(): ll=[1,2,3,4] yield from ll # yield 1 # yield 2 ret=func() print(next(ret)) #1 print(next(ret)) #2
原文:https://www.cnblogs.com/youngyounglady/p/14349245.html