7,迭代器和生成器
列表生成式:
[i for i in range(10)]这就就做列表生成式,等于[0,1,2,3,4,5,6,7,8,9]
生成器:
通过某种算法,我用得上一个列表中的元素,你给我生成一个,而不要我取创建一个完整的列表,这样保存算法的方式就叫做列表生成器
创建生成器:
将列表生成式的[]改成(),g = (i for i in range(10))这就叫做生成器,生成器不能像列表一样用下标调用
next(g)
0
next(g)
1
通过next(g)这样一个一个的调用是非常麻烦的,一般我们都用for循环
g = (i for i in range(10))
for n in g:
print(n)
如果生成器比较复杂,用for搞不定,那就用函数搞定它
def han(max):
n = 0; a=0;b=0;
while n < max:
yield b
a,b = b,a+b
n = n + 1
h = han(10)
这是我们就得到一个函数形式的迭代器,调用时用 h.__next__()来依次调用,程序运行到yield时,会跳出到外面来,直到遇到h.__next__() 或者是 h.send(self)时才继续运行下一步
迭代器:
可迭代对象:
可以直接用for循环的对象,就叫做可迭代对象,包括 list tuple dic str set generator
判断是否是可迭代对象:isinstance()
from
collections
import
Iterable
isinstance(这里放判断对象,Iterable)
返回值为 True,Flase
迭代器:
可以被next()调用并不断返回下一个值的对象叫做迭代器
from collections import Tterator
isinstance(这里放判断对象,Iterator)
返回值为 True,Flase
generator是迭代器,但是 list dic tuple set str是可迭代对象,但是不是迭代器
iter(可迭代对象) 这样就是迭代器