可迭代对象
字符串(str)、列表(list)、字典(dict)、集合(set)
条件:实现了__iter__()函数的独享
判断是否为可迭代对象的办法:
-
第一种办法
from collections.abc import Iterable print(isinstance([1,2,3],Iterable))
-
第二种办法
print iter([1,2,3])
迭代器
条件:可以通过next()方法不断重复获取下一个值,直到所有元素全部输出完之后,返回stopiteration才停止
python3:同时实现了__iter__()和__next__()函数对象,其中__iter__返回迭代器自身,__next__返回下一个元素值
class MyIter:
def __init__(self):
self.cnt = 0
def __iter__(self):
return self
def __next__(self):
return 1
生成器
与迭代器的区别:内存开销更少,生成器并不是一上来就把所有值装载进内存,因而也不会占用大量的内存,只是在需要使用next()函数获取值的时候,才会取一个值返回。(如果在一个1G的文件,查看文件的话,直接加载到内存是很浪费的)
1. 第一种写法
gen = (i for i in range(100))
2. 第二种写法
def generator(k):
i =1
while True:
yield i **k
i +=1
gen = generator(2)
for i in range(4):
sum = 0
sum += next(gen) #相当于每次使用next()之后,generator函数停止了
yield的用法
https://blog.youkuaiyun.com/mieleizhi0522/article/details/82142856/