这篇教程python 装饰器详解与应用范例写得很实用,希望能帮到您。 什么是装饰器从字面意思上来看,装饰器是用来装饰其他东西的工具。在python中装饰器分为函数装饰器和类装饰器。 简而言之,函数装饰器是用来装饰函数的装饰器,其主要目的是增加目标函数的功能,类装饰器也就是装饰类的装饰器,增加类的功能。 函数装饰器装饰器本质是嵌套函数 下面是一个简单的装饰器 # fun1为装饰器名称,function指的是被装饰的函数def fun1(function): def fun2(): print("开始了!") function() # 执行被装饰的函数或者 或者 return function() return fun2 外面的fun1() 需要传入一个参数,这个参数是用来传入要被装饰的函数,里面的fun2() 需要执行function 这个参数。 这是将函数当成参数传入另一个函数。 使用方法: 在需要装饰的函数上添加@装饰器名称 @fun1def fun3(): print("aaa")fun3() 可以等价成这样: def fun3(): print("aaa")fun = fun1(fun3)fun() 输出结果是一致的 执行结果: 开始了! aaa
如果传入的函数需要参数可以这样写: def fun1(function): def fun2(a): print("开始了!") function(a) return fun2@fun1def fun3(a): print(a)fun3("aaa") 输出结果: 开始了! aaa
如果不清楚传入的函数需要多少个参数,可以这样写: def fun1(function): def fun2(*args, **kwargs): print("开始了!") function(*args, **kwargs) return fun2@fun1def 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)@fun1def 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 装饰器详解与应用范例的文章就介绍到这了,更多相关python 装饰器内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net! 自制Python淘宝秒杀抢购脚本双十一百分百中 python字符串操作 |