python 迭代器

#有__next__方法的对象,都认为是可以迭代的,可通过x.__next__()来迭代,当迭代到空行会报错StopIteration
f=open('e:/kangyujiao/test.txt')
print(iter(f) is f)     #文件本身就是迭代器
print(f.__next__(),end='')
print(f.__next__(),end='')
#print(f.__next__(),end='')

#内置函数next,他会自动条用对象的__next__方法,给定一个可迭代对象,调用next(x)和x.__next__()是一样的,当迭代到空行会报错StopIteration
f=open('e:/kangyujiao/test.txt')
print(next(f),end='')
print(next(f),end='')
#print(next(f),end='')

#当for循环开始时,会通过他传给iter内置函数,以便从可迭代对象中获得一个迭代器,返回的对象含有需要的next方法
l=[1,2,3]
print(iter(l) is l)   #列表不是迭代器
i=iter(l)
print(i.__next__())
print(i.__next__())
print(i.__next__())

#其他迭代环境
print(sum([1,2,3,4,5]))    #15
print(list(open('e:/kangyujiao/test.txt')))   #返回文件中的行组成的列表
print(tuple(open('e:/kangyujiao/test.txt')))   #返回文件中的行组成的元组
print('&&'.join(open('e:/kangyujiao/test.txt')))   #返回文件中的行组成的字符串
a,b,c,d=open('e:/kangyujiao/test.txt')  #文件中的行分别赋值给a,b,c,d
print(a,b,c,d)
a,*b=open('e:/kangyujiao/test.txt')  #文件中的第一行赋值给a,其他赋值给b
print(a,b)
print(set(open('e:/kangyujiao/test.txt')))    #返回文件中的行组成的集合
print({i:j for i,j in enumerate(open('e:/kangyujiao/test.txt'))})   #返回文件中的行组成的字典

#多个迭代器vs单个迭代器
#range本身不是迭代器,产生一个迭代器后,他支持多个迭代器,这些迭代器会记住他们各自的位置
r=range(3)
i1=iter(r)
print(next(i1))   #0
print(next(i1))   #1
i2=iter(r)
print(next(i2))   #0
print(next(i2))   #1

#zip,map和filter不支持相同结果上的多个活跃迭代器
z=zip((1,2,3),(4,5,6))
i1=iter(z)
i2=iter(z)
print(next(i1))     #(1,4)
print(next(i1))     #(2,5)
print(next(i1))     #(3,6)

z=map(abs, (-1,-2,-3,-4))
i1=iter(z)
i2=iter(z)
print(next(i1))     #1
print(next(i1))     #2
print(next(i1))     #3

猜你喜欢

转载自blog.csdn.net/weixin_37016700/article/details/78741792