装饰器

一、装饰器就是闭包,将函数当做实参返回。作用:1.不改变被装饰函数代码、调用方式。

2.给被修饰函数添加新功能

def record(func):
    def p():
        print("Enter {}".format(func.__name__))
        func()
    return p
@record  #say_hello=record(say_hellow)
def say_hello():
    print( "hello!")
@record  #say_goodbye=record(say_goodbye)
def say_goodbye():
    print("hello!"# bug here
if __name__ == '__main__':
    say_hello()
    say_goodbye()

 

 

二、同一函数被多个装饰器装饰。

调用步骤类似MRO列表

三、内嵌函数加参数ß----被修饰函数带有参数。*args,**kwargs

四、装饰器加参数

@record(“paraments”)相当于record(“paraments”)(say_hellow)

一般而言,调用一个函数是加一个括号。如果看见括号后还有一个括号,说明第一个函数返回了一个函数,如果后面还有括号,说明前面那个也返回了一个函数。

def record(paraments):
    def a(func):
        def b(*args,**kwargs):
            c=func(*args,**kwargs)
            return c
        return b
    return a

@record("dsfs") #d=record("dsfs")(d)->d=a(d)->d=b
                #d()
def d(paraments):
    pass
posted @ 2018-07-30 21:32  Iving  阅读(141)  评论(0编辑  收藏  举报