首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

python 某一函数上面有多个装饰器

发布网友 发布时间:2022-04-21 17:58

我来回答

2个回答

懂视网 时间:2022-05-10 09:19

首先我们知道函数就是对象.因此,对象:

可以赋值给一个变量

可以在其他函数里定义

所以装饰器也是一样,这个例子中自定义了两个装饰器,然后在test()函数上添加了两个装饰器,运行结果正常。

#!/usr/bin/env python 
#coding:utf-8 
def decorator1(func): 
 def wrapper(): 
 print 'hello python 之前' 
 func() 
 return wrapper 
 
def decorator2(func): 
 def wrapper(): 
 func() 
 print 'hello python 之后' 
 return wrapper 
 
@decorator1 
@decorator2 
def test(): 
 print 'hello python!' 
 
test()

运行结果:

hello python 之前
hello python!
hello python 之后

热心网友 时间:2022-05-10 06:27

首先十分不推荐这种做法, 会令程序难以维护.
其次, 多个装饰器是按照装饰器的顺序进行执行的.
如果你编写过装饰器, 你就应该知道, 其实装饰器就是把函数的名字传入进去, 在执行函数之前, 进行一些提前的处理.
例如下面这段代码, 自定义的装饰器
def add_schedid(handler_func):
"""
@handler_func: 请求处理函数
"""
@functools.wraps(handler_func)
def wrapper(self, *args, **kwargs):
"""
wrapper
"""
# handler_func就是所装饰的函数,可以在这里做一些真正函数执行前所需的处理,
handler_func(self, *args, **kwargs)

return wrapper

装饰器本身就是一个函数, 将所装饰的函数, 作为一个参数传进来, 然后在执行这个函数之前, 进行一个处理,这就是装饰器. 所以和正常函数执行顺序是一样的..

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com