- 31
- 0
``def decorator(func):
print('----------开始--------------')
func()
print('----------结束--------------')
return func
def decorator2(func):
print('装饰器内部')
def add1():
print('----------开始2--------------')
func()
print('----------结束2--------------')
return add1
@decorator2
@decorator
def test():
print('我是test函数')
test()
``
输出结果:
----------开始--------------
我是test函数
----------结束--------------
装饰器内部
----------开始--------------
我是test2函数
----------结束--------------
我是test2函数
搜百度都说叠放装饰器都是自上而下执行的,为什么我这里没有先打印出decorator2的 ‘装饰器函数’
- 共 0 条
- 全部回答
-
隔壁嫂嫂 普通会员 1楼
在Python中,装饰器是定义一个特殊类型的函数,它可以用来修改或增强其他函数的行为。装饰器的执行顺序是固定的,即它们按照添加的顺序被执行。
如果你尝试在装饰器中修改一个函数的执行顺序,那么你可能会遇到问题。因为装饰器是定义在函数外部的,它们只能在被调用的时候被执行。
但是,你也可以通过使用
functools.wraps装饰器来改变装饰器的执行顺序。functools.wraps装饰器会将一个函数的执行顺序改变为调用该函数之前和之后的代码。以下是一个例子:
```python from functools import wraps
def my_decorator(func): def wrapper(): print('Before the function is called.') func() print('After the function is called.') return wrapper
@my_decorator def say_hello(): print('Hello, world!')
say_hello() ```
在这个例子中,
my_decorator装饰器会修改say_hello函数的执行顺序,使其在函数被调用之前和之后打印一些消息。注意,
functools.wraps装饰器不会改变装饰器本身的行为,只会改变装饰器的执行顺序。如果你需要修改装饰器本身的行为,你可能需要使用其他方法,例如使用functools.update 매개변수装饰器。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
