本篇内容主要讲解“怎么应用python装饰器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么应用python装饰器”吧!
从字面意思上来看,装饰器是用来装饰其他东西的工具。在python中装饰器分为函数装饰器和类装饰器。
简而言之,函数装饰器是用来装饰函数的装饰器,其主要目的是增加目标函数的功能,类装饰器也就是装饰类的装饰器,增加类的功能。
装饰器本质是嵌套函数
下面是一个简单的装饰器
# fun1为装饰器名称,function指的是被装饰的函数 def fun1(function): def fun2(): print("开始了!") function() # 执行被装饰的函数或者 或者 return function() return fun2
外面的fun1()
需要传入一个参数,这个参数是用来传入要被装饰的函数,里面的fun2()
需要执行function
这个参数。
这是将函数当成参数传入另一个函数。
使用方法:
在需要装饰的函数上添加@装饰器名称
@fun1 def fun3(): print("aaa") fun3()
可以等价成这样:
def fun3(): print("aaa") fun = fun1(fun3) fun()
输出结果是一致的
执行结果:
开始了!
aaa
如果传入的函数需要参数可以这样写:
def fun1(function): def fun2(a): print("开始了!") function(a) return fun2 @fun1 def fun3(a): print(a) fun3("aaa")
输出结果:
开始了!
aaa
如果不清楚传入的函数需要多少个参数,可以这样写:
def fun1(function): def fun2(*args, **kwargs): print("开始了!") function(*args, **kwargs) return fun2 @fun1 def fun3(a,b): print(a,b) @fun1 def fun4(a,b,c): print(a,b,c) fun3("aaa","bbb") fun4("ccc","ddd","eee")
运行结果:
开始了!
aaa bbb
开始了!
ccc ddd eee
如果函数装饰器需要添加参数,可以这样写:
def fun(msg): def fun1(function): def fun2(*args, **kwargs): print("开始了!{}".format(msg)) function(*args, **kwargs) return fun2 return fun1 @fun(msg="小朋友") def fun3(a,b): print(a,b) fun3("aaa","bbb")
运行结果:
开始了!小朋友
aaa bbb
类装饰器的用法基本和函数装饰器一样,只不过是用类写的装饰器
class fun1(object): def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): print(("开始了!") self.func(*args, **kwargs) @fun1 def fun2(a,b): print(a,b) fun2("aaa","bbb")
类装饰用到了类的__call__
方法
运行结果:
开始了!
aaa bbb
还可以这样写:
class fun(object): def __init__(self, msg): self.msg = msg def __call__(self, func): def fun1(*args, **kwargs): print("开始了!{0}".format(self.msg)) func(*args, **kwargs) return fun1 @fun(msg="小朋友") def fun2(a, b): print(a, b) fun2("aaa,","bbb")
运行结果:
开始了!小朋友
aaa, bbb
到此,相信大家对“怎么应用python装饰器”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。