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)
来源:https://www.cnblogs.com/duzw/p/15969790.html
本站部分图文来源于网络,如有侵权请联系删除。