python3 yield 生成器 介绍

(1) 有时候不想让一个函数一下子执行完,比如这个函数很大,把ui线程卡了;又比如这个函数占了很多内存,想用一点释放一点。这就需要分步地执行这个函数。

(2)既然要分步,就得有断点。用yield关键字来作为断点。

 

(3)本来 分布函数() 这么一写,就该执行了;但是有了yield关键字,处理方式改了。

现在改成,调用了 函数实例.__next__() 或 next(函数实例) ,才执行一小段。

 

(4)就算只执行了一小段,也得有输入、输出

yield后面的东西,就是输出。

至于yield的输入,默认是None。通过 函数实例.send(输入) ,来把输入赋给yield。(注:这个send还会默认调用__next__)

 

def 分步函数():
    print("开始执行")

    print("1")

    yield "这里是第一个断点"

    print("2")

    yield "第二个断点"

    print("3")

    yield "第三个断点"

    print("4")

    return "next方法会一直运行到下一个yield, 找不到就报错。return的内容就是报错信息"


a = 分步函数()

rst = a.__next__()
print(rst)
print()

rst = next(a)
print(rst)
print()

rst = next(a)
print(rst)
print()

try:
    rst = next(a)
    print(rst)
    print()
except:
    import traceback
    print(f"异常:{traceback.format_exc()}")


# for循环默认捕获了异常,并作为结束条件
# a = 分步函数()
# 执行次数 = 0
# for i in a:
#     执行次数+=1
#     print(f"------ {执行次数}")

 

 

有yield关键字的函数就是生成器。

把这分步函数每一步的返回值,改成更有意义的东西(像是连续数字之类的)。这样,就是一般所说的生成器了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值