python---迭代器生成器
什么是迭代器迭代器是一种支持next()操作的对象,它包含了一组元素,当执行next()操作时,返回其中一个元素。当所有元素都被返回后再执行next()报异常---StopIteration#coding:utf-8 迭代器对象包含__iter__方法就是一个迭代器 特点:惰性使用,用完即焚节省内存空间 创建迭代器:iter 格式迭代器对象 iter(可迭代对象) list_iter iter([1,2,3,4,5,6]) #如果迭代对象为字典,生成迭代器获取字典的键 #通过next(迭代器对象)函数获取下一个元素,如果没有元素抛出异常 print(next(list_iter)) 生成器函数中使用yield 关键字生成值就是一个生成器 特点:有暂停执行功能节省内存空间 def 函数(): yield 值 #函数中使用yield 关键字生成器函数 #案例用生成器来实现计数功能 def counter(start 1): count start while True: yield count #当执行yield count 1 #count 递增 1 #创建生成器 count counter() #创建对象 print(next(count))迭代器遍历#coding:utf-8 L [1,2,3,4] I iter(L) #迭代器对象 while True: try: item next(I) print(item) except StopIteration: break迭代器编写class MyIterator: # 2.通过init魔法方法初始化属性指定范围 def __init__(self, start, end): self.current_value start self.end end # 通过重写iterator魔法方法,返回当前对象(即迭代器对象) def __iter__(self): return self # 重写next魔法方法返回当前值并更新当前值。 def __next__(self): if self.current_value self.end: raise StopIteration # 抛出异常迭代结束 self.current_value 1 return self.current_value - 1 for i in MyIterator(1, 6): print(i)生成器生成器的yield#coding:utf-8 定义生成器来创建生成器 (1)生成器函数中使用yield关键字来生成值 (2)调用生成器函数,就返回一个生成器 (3)每对生成器调用一次next函数,就会返回一次yield后面的值 def nums_gen(): for i in range(1,11): yield i nums nums_gen() #调用生成器函数,返回一个生成器nums print(type(nums)) print(next(nums),next(nums),next(nums)) for n in nums: print(n, end )生成器斐波那契数列#coding:utf-8 生成器的斐波那契数列 定义一个斐波那契数列的生成器1,1,2,3,5,8 def fibonacci(n): prev,curr 0,1 for _ in range(n): yield curr prev,curr curr,prev curr fibs fibonacci(20) print(fibs) print(next(fibs),next(fibs),next(fibs),next(fibs)) for item in fibs: print(item,end )生成器总结生成器推导式# 1. 生成器推导式创建生成器生成 1~10 的所有数字 # 用 next() 依次取出前3个数据打印 def demo1(): geen (i for i in range(1,11)) print(next(geen)) print(next(geen)) print(next(geen)) demo1()生成器一个一个取def demo5(): def inner_gen(): linelist [第一行,第二行,第三行] for item in linelist: yield item gen inner_gen() for item in gen: print(item,end ) demo5()