Python3 学习(菜鸟)-06迭代器与生成器
迭代器 iterator
迭代器是一个可以记住遍历的位置的对象,迭代器对象从第一个元素开始访问 直到所有的元素被访问结束。迭代器只能往前不会后退。
iter() 函数
iter() 函数 可以将一个可迭代对象的迭代器取出
Ps: 可迭代对象必须具有迭代器,否则就不具有迭代的能力
next() 函数
next() 函数多次提取迭代器中的数据
lst = [1, 2, 3]iterator = iter(lst)print(next(iterator)) #对迭代器进行一次迭代操作
print(next(iterator)) #对迭代器进行一次迭代操作
print(next(iterator)) #对迭代器进行一次迭代操作#输出结果:
"""
1
2
3
"""
生成器 genrator
创建生成器
1.元组推导式
gen_2 = (i * 2 for i in range(5)) # 创建一个生成器表达式
print(gen_2) # <generator object <genexpr> at 0x0000027D27CCD850>
2.yield关键字
如果函数中有 yield 关键字那么这个函数就是生成器
当调用这个函数时,它并不会立即执行函数体,而是返回一个生成器对象。每当对生成器对象进行迭代时,函数会在每个 yield
语句处暂停,并返回一个值,然后在下一次迭代时从上次离开的地方继续执行。
def gen_func():for x in range(5):yield x
f=gen_func()
print(f) #<generator object gen_func at 0x0000019A1355D7E0>
print(next(f))# 0
print(next(f))# 1
访问生成器
next()
def fun():a = 1print('1')while True:print('2')a += 1print('3')yield aprint('4')# 1. 创建一个生成器对象
f = fun()
print(type(f)) # <class 'generator'># 2. 执行next()方法,会从函数的最上边向下执行,如果碰到yield,会把yield生成的值当作next()函数的返回值
print('\n**********************************')
print('next()函数的返回值:', next(f)) # 2# 3. 执行next()方法,会从yield向下继续执行,然后进入while循环,直到碰到碰到下一个yield,会把yield生成的值当作next()函数的返回值
print('\n**********************************')
print('next()函数的返回值:', next(f)) # 3# 4. 执行next()方法,会从yield向下继续执行,然后进入while循环,直到碰到碰到下一个yield,会把yield生成的值当作next()函数的返回值
print('\n**********************************')
print('next()函数的返回值:', next(f)) # 4
斐波那契数列
1 1 2 3 5 8 ...
本文参考:python生成器_关键迭代-CSDN博客