装饰器修饰带参数的功能函数

 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
正是江南好风景
原文地址:https://www.cnblogs.com/monsterhy123/p/12902352.html