发布网友 发布时间: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
装饰器本身就是一个函数, 将所装饰的函数, 作为一个参数传进来, 然后在执行这个函数之前, 进行一个处理,这就是装饰器. 所以和正常函数执行顺序是一样的..