老师,我想问一下这串代码的执行顺序是怎样的,并且check_str(func)里面的参数为啥还可以写成func(*args,**kwargs)

老师,我想问一下这串代码的执行顺序是怎样的,并且check_str(func)里面的参数为啥还可以写成func(*args,**kwargs)

def check_str(func):
def inner(*args,**kwargs):
result = func(*args,**kwargs)
if result =='ok':
return 'result is %s'%result
else:
return 'result is failed:%s'%result
return inner

@check_str
def test(data):
return data
result = test('no')
print(result)


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕凡 2021-10-13 10:20:50

同学,你好!

以上代码执行顺序:在调用test("no")时,将test函数作为参数传入给check_str(func)函数;将test函数的参数“no”传给了check_str(func)函数内部的inner( )函数,在inner( )函数中调用了test( )函数并将结果返回赋值给result变量,进行了判断后返回结果,最后将inner函数返回。

func(*args,**kwargs):func是check_str(func)接收到的test( )函数,*args,**kwargs是test( )函数的参数,所以func(*args,**kwargs)就是test("no"),test( )的函数可能是任意类型所以使用不定长参数*arg和**kwargs接收,祝学习愉快~


  • 就是,为什么是result = func(*args, **kwargs) 而不是 result = check_str(*args, **kwargs)?


    是因为func虽然是check_str的参数,但也代表test(data)这一函数,所以在check_str中调用时不再用check_str表示(防止无限循环?)而是直接将func看成一个函数?是这样吗?


    2022-02-23 23:24:21
  • 同学,你好!形参func就是接收的test函数,所以func就是test( )函数

    以上代码中,check_str是装饰器的名字,func接收的就是test函数,test( )函数要在check_str( )中执行,祝学习愉快~

    2022-02-24 09:45:05
  • 懂了,谢谢老师

    2022-02-24 12:22:12
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师