Python装饰器调用顺序

By @skenan10/17/2018programming

写了不少python code,但有时还是容易记混装饰器的执行顺序,趁着刚复习完,简单记录一下...

例子

def one(func):
    print('----one----')
    def inside_one():
        print('----inside-one----')
        func()
    return inside_one

def two(func):
    print('----two----')
    def inside_two():
        print('----inside-two----')
        func()
    return inside_two

@one
@two
def demo():
    print('----3----')

demo()

执行顺序

----two----
----one----
----inside-one----
----inside-two----
----3----

这是因为在demo函数未调用前,要先生成一个新的demo函数为one(two(demo))

生成新函数的时的顺序是从下向上

----two----
----one----

当调用 demo()时,执行生成后的函数

----inside-one----
----inside-two----
----3----

应用

@app.route('/')
@login_required
@check_permission
def test():
     pass

这样保证先登录,后验证权限

comments