xone

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

装饰器用来装饰函数,可以在这个函数执行前和执行后做一些操作。

 

def outer(func):
    # func = 原来的f1函数
    def inner():
        print('hello')
        r = func()
        print('end')
        return r
    return inner

@outer
def f1():
    print('F1')
    return 'F1 return'

# 1、执行outer函数,并且将其下面的函数名,当作参数
# 2、将outer的返回值,重新赋值给f1 = outer的返回值
# 加@outer可以理解为,执行f1=outer(f1)
r = f1()    # 新f1函数 = inner
print(r)

以上代码执行结果:

hello
F1
end
F1 return

装饰器装饰含N个参数的函数

def outer(func):
    def inner(*args,**kwargs):
        print('before')
        r = func(*args,**kwargs)
        print('after')
        return r

    return inner

@outer
def f1(a1,a2):
    print('F1')

f1(1,3)

以上代码执行结果

before
F1
after

多个装饰器同时装饰同一个函数:

def outer(func):
    def inner(*args,**kwargs):
        print('before')
        r = func(*args,**kwargs)
        print('after')
        return r

    return inner

def outer2(func):
    def inner(*args,**kwargs):

        print('2')
        r = func(*args,**kwargs)
        return r
    return inner

@outer
@outer2
def f1(a1,a2):
    print('F1')

f1(1,3)

 

posted on 2017-05-01 23:31  周小百  阅读(125)  评论(0编辑  收藏  举报