python 装饰器的实现过程
1、装饰器
举例:
2、装饰器的实现原理等价于下图所示:
3、装饰器的作用举例——使用装饰器计算得到程序运行的时间
4、对没有参数、没有返回值的函数进行装饰:
5、对有参数、没有返回值的函数进行装饰:
输出结果如下:
6、对不定长参数的函数的装饰器
输出结果如下所示:
7、对有返回值的不定长参数的函数装饰器(即:通用装饰器)
运行结果如下所示:
8、多个装饰器对一个函数装饰
运行结果如下所示:
8、多个装饰器对一个函数装饰的demo
示例1:
运行结果如下图所示:
示例2:(即:装饰是从最内层逐渐向最外层装饰)
运行结果如下所示:
9、使用类对一个函数装饰的demo
运行结果如下图所示:
10、带参数的装饰器
(1)低配版(现实中使用不显示)
运行结果如下所示:
(2)高配版(实际开发中使用)
运行结果如下所示:
原理解释如下所示:
代码举例,如下:
import re
URL_FUNC_DICT=dict()
def route(url):
def set_func(func):
URL_FUNC_DICT[url]=func
def call_func(*args,**kwargs):
return func(*args,**kwargs)
return call_func
return set_func
@route("/index.py")
def index():
with open("./templates/index.html",encoding="utf-8") as f:
content = f.read()
my_stock_info = "哈哈哈哈 这是你的本月名称....."
content = re.sub(r"\{%content%\}", my_stock_info, content)
return content
@route("/center.py")
def center():
with open("./templates/center.html",encoding="utf-8") as f:
content = f.read()
my_stock_info = "这里是从mysql查询出来的数据。。。"
content = re.sub(r"\{%content%\}", my_stock_info, content)
return content
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')])
file_name = env['PATH_INFO']
"""
if file_name == "/index.py":
return index()
elif file_name == "/center.py":
return center()
else:
return 'Hello World! 我爱你中国....'
"""
try:
func=URL_FUNC_DICT[file_name]
except Exception as e:
return "产生了异常:%s"%(str(e))
else:
return func()