''' 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()