账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于叠放装饰器的执行顺序问题
    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
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 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 매개변수装饰器。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部