大蟒蛇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 装饰器详解与应用范例的文章就介绍到这了,更多相关python 装饰器内容请搜索<计算机技术网>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网>!

需要了解更多python教程分享python 装饰器详解与应用范例,都可以关注python教程分享栏目—计算机技术网(www.ctvol.com)

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ctvol.com/pythontutorial/937192.html

(0)
上一篇 2021年11月13日
下一篇 2021年11月13日

精彩推荐