# 迭代器是一个对象,生成器是一个函数
from collections.abc import Iterable
# 最简单的生成器
x = [i for i in range(10)] # 列表推导式 x是一个列表
print(x) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = (i for i in range(10))
print(isinstance(y,Iterable)) # True
for 甲 in y:
print(甲)
生成器的使用
# 生成器的形式就相当于一个函数
def my_gen(n):
i = 0
while i < n:
i +=1
# return i # return表示一个函数的结束
yield i # 使用yield结果是个生成器
m = my_gen(10) # 获取一个生成器
# for 甲 in m:
# print(甲)
print(next(m)) # 1当调用next方法,获取数据时,才会调用my_gen方法
print(next(m)) # 2再执行next方法,会在上一次yield出来的位置继续执行代码,也就是继续循环
print(next(m)) # 3
print(next(m)) # 4
# 用生成器做斐波那契数列
def 斐波那契(n):
numbers1 = numbers2 = 1
count = 0
while count < n:
count +=1
yield numbers1
numbers1,numbers2 =numbers2,numbers1+numbers2
乙 = 斐波那契(6)
for 丙 in 乙:
print(丙)