yield函数生成器详解(例子分析)

定义:其实也没啥好说,只要函数中带有yield,那么该函数就是一个生成器了。
特性
首先定义yield生成器函数,如下:

def yield_func():
    print("**")
    while True:
        result = yield 1
        print("result:", result)

运行以下代码:

if __name__ == "__main__":
    it=yield_func()

但是!!啥也没有,说明 1.it=yield_func() 只是定义了一个生成器,根本不会执行生成器里面的内容
运行以下代码:

if __name__ == "__main__":
    it=yield_func()
    print(next(it))

结果如下:

**
1

说明 2.该生成器执行yield语句之后,便会停止执行。
运行以下代码:

if __name__ == "__main__":
    it=yield_func()
    print(next(it))
    print(next(it)))

结果如下:

**
1
result: None
1

该结果说明 3.当再执行next,生成器会在上一次的地方继续执行,直到执行yield返回结果为止。
结合上一个例子,说明 4.执行yield之后,程序并没有结束,而是悬挂那里,等待下一次的执行
但result: None 说明 5. 程序并不保留上一次yield的结果,而是重新开始

再来!

定义如下yiled生成器函数:

def yield_func1():
    for i in [1,2,3]:
        yield i

运行以下代码:

if __name__ == "__main__":
    it=yield_func1()
    print(next(it))
    print(next(it))
    print(next(it))
    print(sum(it))
    print(next(it))

结果如下:

1
2
3
0
Traceback (most recent call last):
  File "c:\Users\92872\Desktop\a\1.py", line 32, in <module>
    print(next(it))
StopIteration

3个next()完了后求和结果为0,再next()就报错, 说明 6.yiled生成器的只会产生一轮结果,迭代完了后执行next()会抛出StopIteration的错误

本人学渣,如果错误,欢迎指出!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值