您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python 装饰器详解与应用范例

51自学网 2022-02-21 10:49:09
  python
这篇教程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字符串操作
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。