# 普通推导式,一次生成5个
list1 =[i for i in range(5)]print(list1)
# 生成器,一次一个
list2 =(i for i in range(5))print(list2,type(list2),next(list2),next(list2))
# 创建自己的生成器
def generatorList(num):for i in range(num):print("开始生成")
#类似return,next执行会把yield后的数值返回
yield i
print("结束生成")
list3 =generatorList(5)print(list3,type(list3))#next超出范围会报异常print(next(list3))print(next(list3))
案例:斐波那契数列
def fibonacci(n):
a =1
b =2
index =0while index < n:
result = a
a, b = b, a + b
index +=1
yield result
for i in fibonacci(10):print("斐波那契数列:", i)
注意点:
reuturn 可以终止生成器,并报错
send()方法的使用
def fibonacci(n):
a =1
b =2
index =0while index < n:
result = a
a, b = b, a + b
index +=1print("11111111111111")
data = yield result
print("22222222222222", data)if data ==13:return"return使生成器结束"#fori in fibonacci(10):#print("斐波那契数列:", i)
fib =fibonacci(10)print(next(fib))print("----------")try:
#和next一样,同时可传递参数给 yield 指定的值(上文中data)
print(fib.send(13))
except BaseException as error:print("停止")else:print("----------")print(next(fib))print("----------")print(next(fib))print("----------")print(next(fib))print("----------")
基础# 普通推导式,一次生成5个list1 = [i for i in range(5)]print(list1)# 生成器,一次一个list2 = (i for i in range(5))print(list2, type(list2), next(list2), next(list2))# 创建自己的生成器def generatorList(num): for i in range(num): print("开始生成") #类似return