python迭代器

#可迭代对象,方法是否包含'__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

 

 
posted @ 2021-01-30 15:36  小仙女学Linux  阅读(56)  评论(0)    收藏  举报