揭开yield关键字的神秘面纱

写在前言

经常会看见,python函数中带有yield关键字,那么yield是什么,有什么作用?

 

答案:可以理解yield是一个生成器;

作用:遇到yield关键字,函数会直接返回yield值,相当于return;不同的是下次调用的时候会从yield之后的代码开始执行。

 

生成器是什么?

是可以迭代的,但是你 只可以读取它一次 ,因为它并不把所有的值放在内存中,它是实时地生成数据:

 

有人可能会说,我直接迭代,遍历多好,为什么要用生成器,然后去遍历生成器,这多麻烦。

那么你要了解,list列表,所有数据是存储在内存中的。如果数据量非常大,会非常耗内存。

 

 

yield是一个特殊的return?

不同的是执行过程中遇到yield关键字,会阻断,yield 返回的是一个生成器。

第一次迭代中你的函数会执行,从开始到达 yield 关键字,然后返回 yield 后的值作为第一次迭代的返回值.

然后,每次执行这个函数都会继续执行你在函数内部定义的那个循环的下一次,再返回那个值,直到没有可以返回的。

 

注意,当函数中出现yield,该函数返回的就是一个生成器。不在是普通函数。

def func(num):
    n,a,b = 0,0,1
    while num > n:
        yield b  #阻断,返回b a,b = b,a + b n+=1 for i in func(19): #func(19)是一个生成器,生成器只有调用时执行一次。所以这里用循环 print i

 

除了for循环取值,你也可以通过next()来取下一个值。

t = func(19)
t.next()

 

转载于:https://www.cnblogs.com/yhleng/p/9358971.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值