1 """ 2 带参数的功能函数的装饰 3 """ 4 import time 5 def writeLog(func): 6 print('访问了方法名:',func.__name__,' 时间:',time.asctime()) 7 8 #定义一个闭包 9 def funOut(func): 10 def funIn(x,y): 11 writeLog(func) 12 return func(x,y) 13 return funIn 14 15 #添加装饰器 16 @funOut # 相当于执行:f = funOut(sum) 把该功能函数名作为外部函数的变量参数执行 17 def sum(a,b): 18 return a + b 19 20 result = sum(10,20) 21 print('两数之和:',result) 22 """ 23 分析:执行过程 24 @funOut # 相当于执行:f = funOut(sum) 把该功能函数名作为外部函数的变量参数执行, 25 外部函数执行完返回内部函数的函数名:funIn,指向内部函数,内部函数使用外部函数的变量参数sum, 26 funIn调用内部函数,执行:writeLog(sum)和sum(10,20),并返回。 27 """ 28 #功能函数中有三个参数 29 def funOut2(func): 30 def funIn(a,b,c): 31 writeLog(func) 32 return func(a,b,c) 33 return funIn 34 @funOut2 35 def add(a,b,c): 36 return a+b+c 37 result = add(10,20,30) 38 print('三数之和:',result)
1 访问了方法名: sum 时间: Sat May 16 21:49:38 2020 2 两数之和: 30 3 访问了方法名: add 时间: Sat May 16 21:49:38 2020 4 三数之和: 60