提问:
老师,这里闭包的调用绕来绕去的,我的确看了几遍视频都不是很明白。想问一下几个问题:
1) 程序执行是从哪里开始的?
是从 func1 = funcOut(func1) 和 func2 = funcOut(func2) 还是从 func1()和func2()开始的?看下面有些人的提问是说从func1()和 func2()开始的,不太明白为什么要跳过前面的 func1 = funcOut(func1) 和 func2 = funcOut(func2)
2) func1 = funcOut(func1) , 把funcOut(func1) 赋值给func1, 因为funcOut(func1)的结果是return funcIn, 所有是相当于是 func1 = funcIn ?
3) return funcIn 返回的是一个内部函数名,返回的是funcIn函数执行的结果?
"""
装饰器 Decorator
"""
import time
def writeLogs(func):
try:
file = open('log.txt', 'a', encoding="utf-8")
file.write(func.__name__)
file.write('\t')
file.write(time.asctime())
file.write('\n')
except Exception as e:
print(e)
finally:
file.close()
# 使用闭包,在不修改源代码的情况下,添加日志功能
def funcOut(func):
def funcIn():
# 添加新的功能
writeLogs(func) # 新增功能,日志
func() # 执行原来的功能
return funcIn
def func1():
print("我是功能1")
def func2():
print("我是功能2")
# 闭包的调用
func1 = funcOut(func1) # 这里是把func1当做实参传到funcOut(func)函数中,func = func1
func2 = funcOut(func2) # 这里是把func2当做实参传到funcOut(func)函数中,func = func2
func1()
func2()
