Python生成器与迭代器
2017-12-04 21:31
218 查看
1、生成器
生成器只有在用的时候会出现在内存中,对比列表全部存在内存中,减少了内存占用next()函数 依次取生成器的值
s = (x*2 for x in range(1000)) # 中括号是列表解析,小括号表示生成一系列值,就是生成器 # s: <generator object <genexpr> at 0x7fa20aa8b048> print(next(s)) # 用next()函数取生成的值 print(next(s)) # 取出这个值后会记录这个位置,下次从后面依次取值 # 生成器就是一个可迭代的对象
yield方法 创建生成器对象
def foo(): # print('ok1') # 不使用next方法,函数内部不会执行 yield 1 # 使用next方法后,才会执行yield前面的代码并返回值,函数停在该位置 # print('ok2') yield 2 # for i in foo(): # for循环就是封装的迭代器取值方法 print(i) p = foo() next(p) # 取生成的值 print(next(p))
def fibo(m): a,b,c=0,0,1 while a<m: yield b # 把计算出来的菲博列次数存到生成器对象中 b,c=c,c+b a+=1 f = fibo(8) for i in f: # 依次迭代取出来 print(i)
send()函数 给yield前边的变量赋值
def foo(): print('ok1') kk = yield 1 # 程序走到这里会返回该迭代器对象,并不会直接赋值 print(kk) yield 2 n = foo() n.send(None) # 首先传一个空值进去,让函数记住迭代器对象的位置 # next(n) # 也可以让next()函数走到第一个迭代器对象的位置,效果同上 n.send('eee') # 然后在这里传一个值给记住的代器对象位置前面的变量
2、迭代器
# list, tuple, dict, string : Iterable(可迭代对象) l = [1,2,3,4,5] d = iter(l) # iter()函数生成一个迭代器 print(d) # <list_iterator object at 0x7fe7572b28d0> print(l.__iter__()) # 效果同上 # 满足两个条件: 1.有iter方法 2.有next方法 就是一个迭代器 from collections import Iterable,Iterator print(isinstance(d, Iterator)) # 判断是否为迭代器 True
相关文章推荐
- python——迭代器和生成器
- python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化
- python高级之生成器&迭代器
- Python的迭代器和生成器
- python学习笔记四 迭代器,生成器,装饰器(基础篇)
- 小论python的迭代器和生成器
- Python学习之三大名器-装饰器、迭代器、生成器 推荐
- python迭代器和生成器
- Python 迭代器 和 生成器yield
- python的迭代器和生成器
- python3基础: 元组tuple、 列表list、 字典dict、集合set。 迭代器、生成器
- Python迭代器和生成器
- Python3 迭代器与生成器
- Python3中的列表生成式、生成器与迭代器实例详解
- python--迭代器与生成器
- python的高级特性:切片,迭代,列表生成式,生成器,迭代器
- python(四)上:列表生成式、生成器、迭代器和内置函数
- python3 迭代器与生成器整理12.24
- Python迭代器/生成器
- python 生成器和迭代器的区别