装饰器操作

'''
def decorator(f1):
    def  f2():
        ####内部的这个函数就是包裹函数,也就是装饰器函数
        ####
    return f2
'''
def log(func):
    def wrapper():
        print('call %s():' % func.__name__)
        # print(locals())
        return func()
        #返回函数的执行
    # print(func.__name__)
    print(locals())
    # #装饰器中有两个函数一个是传进来的函数,一个是装饰器函数,即包裹函数
    #装饰器中返回了两个函数,一个是通过参数传递进去的函数,另外一个就是装饰器的包裹函数,当now = log(now)或@log被执行以后,包裹函数就会在内存中开辟一个空间,而内层空间的变量也会被记录在内层空间中
    #而此时函数还没有被调用,也就是内存空间还没有被回收,这也就是装饰器为什么能记忆环境的额原因
    return wrapper

def now():
   print('2020-2-17')

now = log(now)
#函数now被
now()

 

你可能感兴趣的:(装饰器操作)