1 #闭包 2 #1,函数内定义了一个函数,内部函数使用了外部函数的局部变量,外部函数返回内部函数名 3 #2,定义一个变量func,值等于调用外部函数返回的返回值wrapper 4 #3,调用func() 5 #这一整个的过程称为闭包 6 7 def closed_pack(): 8 num = 1 9 def wrapper(): 10 print(num) 11 return wrapper 12 13 func = closed_pack() 14 func() 15 16 #原函数只有打印的功能 17 #现在想给原函数增加新的功能 18 #可以通过闭包来实现 19 20 def closed_package(origin_func): 21 def add_new_print(): 22 print("add_new_print") 23 origin_func() 24 return add_new_print 25 26 def origin_func(): 27 print("origin func") 28 29 func = closed_package(origin_func) 30 func() 31 32 #装饰器 33 #################################### 34 # 以下代码是装饰器 # 35 # # 36 #################################### 37 #通过闭包增加新功能 38 def wrapper(old_func): 39 def add_new_methods(): 40 print("在原来函数增加新的打印") 41 old_func() 42 return add_new_methods 43 44 def origin_fun(): 45 print("origin func") 46 47 func = wrapper(origin_fun) 48 func() 49 50 #通过闭包增加新功能,原函数有多个参数 51 def wrapper(old_func): 52 def add_new_methods(*args, **kwargs): 53 print("在原来函数增加新的打印") 54 old_func(*args, **kwargs) 55 return add_new_methods 56 57 def origin_fun(num, str): 58 print("origin func",num,str) 59 60 func = wrapper(origin_fun) 61 func(1,"lili") 62 63 #通过闭包增加新功能,原函数有多个参数,并且有返回值 64 def wrapper(old_func): 65 def add_new_methods(*args, **kwargs): 66 print("在原来函数增加新的打印") 67 return old_func(*args, **kwargs) 68 return add_new_methods 69 70 def origin_fun(num, str): 71 print("origin func",num,str) 72 return num, str 73 74 func = wrapper(origin_fun) 75 func(1,"lili") 76 77 #装饰器 78 def wrapper(old_func): 79 def add_new_methods(*args, **kwargs): 80 print("在原来函数增加新的打印") 81 return old_func(*args, **kwargs) 82 return add_new_methods 83 84 @wrapper #在原函数处拦截原函数的调用,增加新的功能 85 def origin_fun(num, str): 86 print("origin func",num,str) 87 return num, str 88 89 origin_fun(1,"lili") 90 91 #装饰器 接收原函数的返回值 92 def wrapper(old_func): 93 def add_new_methods(*args, **kwargs): 94 print("在原来函数增加新的打印") 95 return old_func(*args, **kwargs) 96 return add_new_methods 97 98 @wrapper #在原函数处拦截原函数的调用,增加新的功能 99 def origin_fun(num, str): 100 print("origin func",num,str) 101 return num, str 102 103 n, s = origin_fun(1,"lili") 104 print(n,s)