"""
使用生成器创建一个斐波那契数列
相关地址:https://blog.csdn.net/mieleizhi0522/article/details/82142856/
"""deffbona(num):"""
正常情况下 fbona(num) 是一个函数 但是当一个函数中出现了yield 时 该数据就是一个特殊的迭代器了 也就是生成器
程序代码每次运行到 yield 时就等于是在next() 方法下 return一个值且暂停fbona() 方法,直到下次调用next()方法时 启动
:param num:
:return:
"""
a, b =0,1
current_num =0while current_num < num:yield a
a, b = b, a + b
current_num +=1return"ok....."if __name__ =='__main__':
f = fbona(20)whileTrue:try:print(next(f))except StopIteration as s:print(s.value)break
04生成器中使用seed进行传值
"""
同yield seed() 效果是一样的 但是yield是不会传入值 seed() 可以在函数中yield调用后 返回一个seed 传入的值
在生成器业务中 如果有需要传值 或者需要临时的根据各种外部条件对业务逻辑进行调整的时候
这里就需要用到seed, 需要注意的是在第一次循环时需要使用seed的时候seed() 里面不能传入值 否则会报错
"""deffbnqsl(num):
current_num, a, b =0,0,1while current_num < num:
ret =yield a
if ret isnotNone:print("当前seed传入的值是[{}]".format(ret))
a, b = b, a + b
current_num +=1if __name__ =='__main__':
f = fbnqsl(20)print(next(f))print(f.send(123))print(f.send(222))for i in f:print(i)