在了解完闭包之后,相信大家已经对闭包这个概率已经有了一些认识,而我们下面所学的装饰器这个知识点则是建立在闭包的基础之上。没有接触过闭包的童鞋请看我的博客(链接在文章底部)
好了,在了解完基本概念后,接下来直接带领大家从代码的角度认识一下:
首先用闭包来实现这个功能:
import time def writeLog(func): try: with open('log.txt', 'a', encoding = 'utf-8') as f: # 打印参数名字 f.write(func.__name__) f.write('\t') # 写入时间 f.write(time.asctime()) f.write('\n') except Exception as e: print(e) # 闭包 def funcOut(func): def funcIn(): # 内部函数调用外部参数 writeLog(func) func() return funcIn def func1(): print('My name is a') def func2(): print('My name is b') func1 = funcOut(func1) func2 = funcOut(func2) func1() func2()在上面的代码中,我们仅仅写入了俩个函数的基本内容。可是假设我们要写100个函数呢,又或者1000个函数呢,我们这个时候不可能写100个,1000个 func1 = funcOut(func1) 之类的代码。那么怎么办呢,答案当然是用装饰器来解决这个问题。
我们发现,修改后的代码仅仅多了俩个@funcOUt,这个的作用就和func2 = funcOut(func2)的作用一样。运行,会发现依旧可以实现功能。
闭包的链接: https://mp.csdn.net/console/editor/html/107073175