欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Python:被装饰的函数,多个装饰器的装饰过程

Python:被装饰的函数,多个装饰器的装饰过程

2025/3/13 7:44:47 来源:https://blog.csdn.net/2302_80457734/article/details/146214122  浏览:    关键词:Python:被装饰的函数,多个装饰器的装饰过程

被装饰的函数有参数:

def outer(fn):def inner(name):print(f"login{name}")#执行被装饰的函数fn(name)return inner
@outer
def send(name):print("参数")
send('lihailu')#语法糖形式
def outer(fn):def inner(name):print(f"login{name}")#执行被装饰的函数fn(name)return inner
#@outer
def send(name):print("参数")
#send('lihailu')
ot=outer(send)#ot=inner
ot('lihailu')#标准装饰器形式

被装饰的函数有可变函数*args,**kwargs:

def func(*args,**kwargs):print(args)print(kwargs)
func(name='lihailu')#普通函数
def func(*args,**kwargs):print(args)print(kwargs)
#func(name='lihailu')
#装饰器函数
def outer(fn):def inner(*args,**kwargs):print("login...")fn(*args,**kwargs)return inner
ot=outer(func)
ot(xixi,name="lihailu")#前者以元组的形式传递给args,后者以键等于值的形式传递给kwargs

多个装饰器:
 

def outer(fn):def inner():return "123"+fn()+"456"return inner
def outer1(fn):def inner():return "789" + fn() + "000"return inner
#被装饰的函数一
@outer
@outer1#多个装饰器的装饰过程离函数最近的装饰器先装饰,然后外面的显示器再进行装饰,由内到外的装饰过程
def test1():return "python"
print(test1())

结果为:123789python000456#加红色的表示先装饰,就像一层糖包着一层糖

可以理解为:在装饰器函数里,fn是传入的函数对象,当调用fn()时,就相当于调用传入的函数。在多个装饰器的情形下,装饰器会按照从内到外的顺序依次应用,每个装饰器返回的新函数会调用上一个装饰器处理后的函数,最终调用到最初的被装饰函数。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com