Python教程

python闭包和装饰器

本文主要是介绍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)

 

这篇关于python闭包和装饰器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!