函数装饰器——带数函数装饰器

55 篇文章 0 订阅
34 篇文章 0 订阅

在分析funA()函数装饰器和 funB() 函数的关系时,细心的读者可能会发现一个问题,即当 funB() 函数无参数时,可以直接将 funB ()作为 funA() 的参数传入。但是,如果被修饰的函数本身带有参数,那应该如何传值呢?
比较简单的解决方法就是在函数装饰器中嵌套一个函数,该函数带有的参数个数和被装饰器修饰的函数相同。
例如:

def funA(fn):
    # 定义一个嵌套函数
    def say(arc):
        print("Python 学习:", arc)
        funB(arc)
        
    return say
@funA
def funB(arc):
    print("funB():", arc)

if __name__ == "__main__":
	funB("http://python.study.net")

输出结果:

Python 学习: http://python.study.net

其实,它和如下程序是等价的:

def funA(fn):
    # 定义一个嵌套函数
    def say(arc):
        print("Python 学习:",arc)
    return say
def funB(arc):
    print("funB():", arc)

if __name__ == "__main__": 
	funB = funA(funB)
	funB("http://python.study.net")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初于青丝mc终于白发

老爷们,觉得好的给个打赏呗!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值