python 生成器与迭代器
在Python中, ⼀边循环⼀边计算的机制, 称为⽣成器: generator
创建生成器: G = ( x*2 for x in range(5))
可以通过 next() 函数获得⽣成器的下⼀个返回值
没有更多的元素时, 抛出 StopIteration 的异常
生成器也可以使⽤ for 循环,因为⽣成器也是可迭代对象
创建生成器的另外一种方法:
def fib(times): #斐波拉契数列(Fibonacci
n = 0
a,b = 0,1
while n<times:
yield b
a,b = b,a+b
n+=1
return 'done'
使⽤ __next__() ⽅法
使⽤send() 方法 (第一次不能使用,使用前先调用next)
next()等价于send(None)
def gen():
i = 0
while i<5:
temp = yield i #接收send传入的参数
print(temp)
i+=1
⽣成器的特点:
1. 节约内存
2. 迭代到下⼀次的调⽤时, 所使⽤的参数都是第⼀次所保留下的
迭代是访问集合元素的⼀种⽅式。 迭代器是⼀个可以记住遍历的位置的对象 。迭代器只能往前不会后退
可迭代对象(Iterable)
集合数据类型, 如 list 、 tuple 、 dict 、 set 、 str 等
⽣成器和带 yield 的generator function
如何判断对象可迭代?
from collections import Iterable
isinstance([], Iterable)
迭代器(Iterator):可以被next()函数调⽤并不断返回下⼀个值的对象称为迭代器
from collections import Iterator
isinstance((x for x in range(10)), Iterator)
iter()函数 :将可迭代对象转换成迭代器