Python迭代器与生成器
2018-03-18 00:00
369 查看
摘要: 迭代器,生成器
迭代器协议—内部含有__next__方法和__iter__方法的就是迭代器
只要能被for循环的数据类型,就一定拥有__iter__方法,for循环其实就是在使用迭代器
只要是迭代器就一定可以迭代
可迭代对象.__iter__() == 迭代器
迭代器中的__next__()方法可以一个一个的获取值
迭代器对象可以使用常规for语句进行遍历:
执行以上程序,输出结果如下:
节省内存空间
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行 next()方法时从当前位置继续运行。
迭代器iterator
可迭代协议—只要含有__iter__方法的,都是可迭代的iterable迭代器协议—内部含有__next__方法和__iter__方法的就是迭代器
只要能被for循环的数据类型,就一定拥有__iter__方法,for循环其实就是在使用迭代器
只要是迭代器就一定可以迭代
可迭代对象.__iter__() == 迭代器
迭代器中的__next__()方法可以一个一个的获取值
迭代器对象可以使用常规for语句进行遍历:
list=[1,2,3,4] it = iter(list) # 创建迭代器对象 for x in it: print (x, end=" ")
执行以上程序,输出结果如下:
1 2 3 4
迭代器的好处
从容器类型中一个一个的取值,会把所有的值都取到节省内存空间
生成器
生成器函数本质上就是我们自己写的函数跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行 next()方法时从当前位置继续运行。
yield关键字
yield关键字和return用法相同,只要含有yield关键字的函数,都是生成器函数,yield需要写在函数内部,不可以和return同时使用,生成器函数执行后会得到一个生成器作为返回值def generator(): print(1) yield 'a' #生成器函数 : 执行之后会得到一个生成器作为返回值 ret = generator() print(ret) print(ret.__next__())
#娃哈哈%i def wahaha(): for i in range(2000000): yield '娃哈哈%s'%i count = 0 for i in g: count +=1 print(i) if count > 50: break for i in g: count +=1 print(i) if count > 100: break
相关文章推荐
- python 迭代器和生成器的区别
- Python 生成器 & 迭代器
- python- 迭代器与生成器
- python生成式,生成器,迭代器
- Python——迭代器和生成器
- python基础:迭代器与生成器
- python 迭代器 生成器
- 第4章 python闭包函数 装饰器 迭代器 生成器
- python开发学习-day04(迭代器、生成器、装饰器、二分查找、正则)
- Python学习之路六---迭代器、生成器
- Python的迭代器和生成器使用实例
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析
- Python 迭代器和生成器
- ·python·用生成器和迭代器实现自己的xrange
- python——迭代器和生成器
- python yield generator (迭代器 生成器 协程) 理解
- python之迭代器和生成器
- 【Python】10“生成器和迭代器“
- python基础之生成器迭代器
- python 迭代器 生成器