Python中关于@修饰符、yeild关键词、next()函数的基本功能简述

@修饰符用于将函数作为参数传递,yield关键字则结合生成器,实现返回值的延迟计算和多次交互。yield不仅是返回点,还能在后续调用中继续执行函数状态,而next()用于获取生成器中的下一个值。注意,@后面应紧跟函数,且生成器的内容非一次性加载,而是按需产生。
摘要由CSDN通过智能技术生成

关于@修饰符:其实就是将@修饰符下面的函数当成参数传给它上面的函数。

def a(x):
  print('a')

@a

def b():
  print('b')

其效果等价为:

def a(x):
  print('a')

def b():
  print('b')

a(b())

有个记忆诀窍,@的下面哪个函数最近,谁就是儿子,@谁就是喊谁爸爸,布局如果是 a @a b,那就是b喊a爸爸,即a(b()),爸爸保护儿子。(如下图:)

@等同于喇叭,他后面的哪个儿子(函数)离他最近才能用它召唤爸爸,并且他的爸爸只要在喇叭@之上就行,不管有多远,爸爸总会回来保护儿子。

 @+函数名,不可以加(),喊爸爸要用敬称。禁用@a(),只能用@a

PS:@行后面只能跟函数(不要试图在@后加其他语句,如print等,会报错)如下图:

关于yield关键字:他有2个基本功能:return 返回功能+生成器功能

return返回功能就显示它必须用在函数内部,语句执行到它时跳出该函数并返回值。

 见下图:

yield与return第一个不同之处:大家可以看到,yield相当于return,但是他不是直接返回值,而是返回一个生成器(可以理解为一个内存卡),生成器内部的数据只能用for循环之类的读卡器才能读取。 

yield与return第二个不同之处:yield其实是个中断点,可以通过再次访问读取下一个值,而return是个断点,见下图,如将yield换成return,那么返回的只能是第一个值,函数内部的运行到第一个return就结束了,无论你用for循环读取几次。

 另外,yield常常跟next()函数入对出双,因为,next就是读卡器。用法见下图:

 大家可以看到,next的访问,都从中断点后继续进行访问,若生成器已被读完,继续读取则报错。

ps:yield生成器不是一开始就含括了所有返回值,而是通过访问到某个值才在生成器中添加该值,详见下图:

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值