百木园-与人分享,
就是让自己快乐。

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)

 


来源:https://www.cnblogs.com/duzw/p/15969790.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » python闭包和装饰器

相关推荐

  • 暂无文章