python闭包和装饰器
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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!