Python-装饰器

装饰器

  装饰器用来装饰函数,在执行前后进行一些操作。

def outer(func):
    def inner():
        print("start")
        func()
        print("end")
    return inner

@outer
def f1():
    print("ok")

f1()
#执行结果:
#start
#ok
#end

  解释器执行到@outer,执行outer方法;

  将@outer下面的函数名作为参数传入outer方法

  将outer方法的返回值,重新赋值给f1

  本质是将原函数封装到另一个函数中,将新的函数赋值给原函数

  只要函数应用了装饰器,那么韩式将被重新定义为装饰器的内层函数 

   

   装饰器传参

def outer(func):
    def inner(*args, **kwargs):
        print("welcome")
        r = func(*args, **kwargs)
        print("good")
        return r
    return inner

@outer
def f7(args1, args2):
    result = args1 + args2
    print(result)

f7(10, 500)
# 执行结果:
# welcome
# 510
# good
f7("hello " , "world")
# 执行结果:
# welcome
# hello world
# good

 

 

   使用多个装饰器

def outer_1(func):
    def inner(*args, **kwargs):
        print("outer_1")
        r = func(*args, **kwargs)
        print("outer_1")
        return r
    return inner

def outer_2(func):
    def inner(*args, **kwargs):
        print("outer_2")
        r = func(*args, **kwargs)
        print("outer_2")
        return r
    return inner

@outer_1
@outer_2
def f7(args1, args2):
    result = args1 + args2
    print(result)

f7("hello " , "world")

# 执行结果:
# outer_1
# outer_2
# hello world
# outer_2
# outer_1

 

posted @ 2016-05-12 18:34  阿金study  阅读(76)  评论(0)    收藏  举报