python中的yield与return的区别,以及yield究竟是个什么东西

今天写代码遇见了yield这个关键字,在我的映像中是用来生成生成器(generator)的。网上很多教程,很多信息都说这个yield如何如何的,都让我很费解,无奈下只好翻出参考书,认真阅读了一些yield的信息。
yield究竟是个什么东西呢?说白了就是特殊的return而已,与return不同的是,return返回后,函数直接结束;而yield返回后,程序是冻结的。也许说的太抽象,可以看看下面这个代码。

#return与yield的区别
def test(one):
    print("函数启动...")
    step = 2#设置步进长,便于下文理解
    cur = 0#设置步进开始点,便于下文理解
    for i in range(one):
        cur += step
        print("这是函数执行的第"+str(i)+"步")
        print("此时步位位于第"+str(cur)+"处")
        yield cur#函数执行到此处,实行冻结;专业术语说就是生成器的暂停处
t = test(10)
print(t)
print(next(t))
print(next(t))

在上文中有个函数test(one),运行后的结果如下:
在这里插入图片描述
看执行结果,可以知道,上述的for循环并没有执行完毕,原因是什么呢?就是关键字yield造成的。程序执行到yield cur时,函数test返回cur并陷入冻结状态,也就是说返回cur后,程序不再执行for循环了,直接执行下面的程序。
在代码段中,有一段是t = test(10),表示用test函数生成一个生成器(generator)。
当程序被yield冻结后,只有调用next()函数或遍历生成器时才能获取下一个循环值,函数才会真正的执行。
有对比才有效果,把上述的程序的yield替换成return。如下:

#return与yield的区别
def test(one):
    print("函数启动...")
    step = 2#设置步进长,便于下文理解
    cur = 0#设置步进开始点,便于下文理解
    for i in range(one):
        cur += step
        print("这是函数执行的第"+str(i)+"步")
        print("此时步位位于第"+str(cur)+"处")
        return cur#函数执行到此处,实行冻结;专业术语说就是生成器的暂停处
t = test(10)
print(t)
print(next(t))
print(next(t))

执行结果如下:
在这里插入图片描述
看见没,直接报错,说到这应该懂了吧?贵在自悟,多的说多无益。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值