python装饰器应用_Python装饰器实现方法及应用场景详解
应用场景:
1、授权(Authorization)
装饰器能有助于检查某个人是否被授权去使用一个web应用的端点(endpoint)。它们被大量使用于Flask和Django web框架中。这里是一个例子来使用基于装饰器的授权:from functools import wraps # 最新版python引用是 import functools
def requires_auth(f): # f 就是我们需要装饰的函数,一看就是不带参数的装饰器
@wraps(f) # 新版python写法 @functools.wraps(f)
def decorated(*args, **kwargs):
auth = request.authorization
if not auth or not check_auth(auth.username, auth.password):
authenticate()
return f(*args, **kwargs)
return decorated # 该装饰器需相关配置才能运行,这里是截取代码展示应用
2.、日志(Logging)
日志是装饰器运用的另一个亮点。这是个例子:from functools import wraps
def logit(func):
@wraps(func)
def with_logging(*args, **kwargs):
print(func.__name__ + " was called")
return func(*args, **kwargs)
return with_logging
@logit
def addition_func(x):
"""Do some math."""
return x + x
result = addition_func(4)
我敢肯定你已经在思考装饰器的一个其他聪明用法了。
3.、带参数的装饰器
带参数的装饰器是典型的闭包函数
4.、在函数中嵌入装饰器
我们回到日志的例子,并创建一个包裹函数,能让我们指定一个用于输出的日志文件from functools import wraps
def logit(logfile='out.log'):
def logging_decorator(func):
@wraps(func)
def wrapped_function(*args, **kwargs):
log_string = func.__name__ + " was called"
print(log_string)
# 打开logfile,并写入内容
with open(logfile, 'a') as opened_file:
# 现在将日志打到指定的logfile
opened_file.write(log_string + '\n')
return func(*args, **kwargs)
return wrapped_function
return logging_decorator
@logit()
def myfunc1():
pass
myfunc1()
# Output: myfunc1 was called
# 现在一个叫做 out.log 的文件出现了,里面的内容就是上面的字符串
@logit(logfile='func2.log')
def myfunc2():
pass
myfunc2()
# Output: myfunc2 was called
# 现在一个叫做 func2.log 的文件出现了,里面的内容就是上面的字符串
5.、装饰器类
现在我们有了能用于正式环境的logit装饰器,但当我们的应用的某些部分还比较脆弱时,异常也许是需要更紧急关注的事情。比方说有时你只想打日志到一个文件。而有时你想把引起你注意的问题发送到一个email,同时也保留日志,留个记录。这是一个使用继承的场景,但目前为止我们只看到过用来构建装饰器的函数。
幸运的是,类也可以用来构建装饰器。那我们现在以一个类而不是一个函数的方式,来重新构建logit。
以上就是本文的全部内容,希望对大家的学习有所帮助。
python装饰器应用_Python装饰器实现方法及应用场景详解相关推荐
- python中类的构成_Python中类型关系和继承关系实例详解
本文详细介绍了Python中类型关系和继承关系.分享给大家供大家参考.具体分析如下: 如果一个对象A持有另一个对象B的ID,那么检索到A之后就可以检索到B,我们就说存在一个A到B的导航.这种导航关系使 ...
- python生成表格文件_python 读取excel文件生成sql文件实例详解
python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次.这次是为了从excel文件中读取数据然后写入到数据库中.这个逻辑用java来写的话就太重了,所以 ...
- python动态图表变化_Python数据可视化 pyecharts实现各种统计图表过程详解
Python数据可视化 pyecharts实现各种统计图表过程详解 发布时间:2020-09-10 04:53:26 来源:脚本之家 阅读:78 1.pyecharts介绍 Echarts是一款由百度 ...
- python数值类型教程_Python数值类型 int、float、complex 详解
Python数值类型 int.float.complex 详解 Python数值类型:int.float.complex 在Python程序中,int.float和complex是三种十分重要的数值类 ...
- python io密集 多线程_python多进程和多线程究竟谁更快(详解)
python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为 ...
- python hook pc微信_python实现微信跳一跳辅助工具步骤详解
说明 1.windows上安装安卓模拟器,安卓版本5.1以上 2.模拟器里下载安装最新的微信6.6.1 3.最好使用python2.7,python3的pyhook包有bug,解决比较麻烦 步骤 1. ...
- python编写病毒扫描器_python实现集中式的病毒扫描功能详解
本文实例讲述了python实现集中式的病毒扫描功能.分享给大家供大家参考,具体如下: 一 点睛 本次实践实现了一个集中式的病毒扫描管理,可以针对不同业务环境定制扫描策略,比如扫描对象.描述模式.扫描路 ...
- python 内存分析工具_python内存监控工具memory_profiler和guppy的用法详解
python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用.python循环引用的变量不会被回收,这会导致程序越运行,占用的内存越大.我 ...
- python不同颜色数值大小_python matplotlib:plt.scatter() 大小和颜色参数详解
语法 plt.scatter(x, y, s=20, c='b') 大小s默认为20,s=0时点不显示:颜色c默认为蓝色. 为每一个点指定大小和颜色 有时我们需要为每一个点指定大小和方向,以区分不同的 ...
最新文章
- 清空list_3. Python3轻食丨一个故事看懂List所有用法:1年级1班的班级生活
- linux——DHCP的配置问题
- VTK:Medical之MedicalDemo3
- 根据数据集获取概率密度图像和概率分布图像
- 我的嵌入式开发之路(.Net Micro Framework)
- 【ZOJ - 2949】Coins of Luck (概率dp,期望)
- ==与equal在java中应用的感悟
- mui 获取地图当前位置和经纬度
- python标准库之参数解析库
- Python matplot画散列图
- MySQL数据操作:增删改查
- 创业型 APP 如何筛选合适的推送平台
- gvim 启动 全屏
- ae遮罩路径图形扭曲插件BAO Boa
- R语言使用order函数对dataframe数据进行排序、基于单个字段(变量)进行升序排序(ASCENDING)
- Kaggle Quora-如何快速进行数据分析 #0
- python unit test什么意思_python中的unittest有什么作用
- python二级题库(百分之九十原题) 刷题软件推荐 第六套
- Centos挂载iscsi存储(浪潮存储)
- 卡塔尔世界杯进入倒计时,万人观赛的直播体验如何保障?
热门文章
- 【论文复现】使用RCNN进行文本分类
- cms是什么意思啊_美团面试官问我:ZGC 的 Z 是什么意思?
- Facebook广告账号主页创建时,其实还有这些小知识!
- python 矩阵元素如何表示_python 怎么给矩阵里的每一个元素赋值
- 吴恩达机器学习总结一:初识机器学习
- 【Python3爬虫】用Python中的队列来写爬虫
- [雪峰磁针石博客]2018最佳人工智能数据采集(爬虫)工具书下载
- UWP 流畅设计中的光照效果(容易的 RevealBorderBrush 和不那么容易的 RevealBackgroundBrush)...
- 02-NLP-04基于统计的翻译系统-03-短语翻译表构造——短语抽取
- 性能测试:基础(3)