应用场景:

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装饰器实现方法及应用场景详解相关推荐

  1. python中类的构成_Python中类型关系和继承关系实例详解

    本文详细介绍了Python中类型关系和继承关系.分享给大家供大家参考.具体分析如下: 如果一个对象A持有另一个对象B的ID,那么检索到A之后就可以检索到B,我们就说存在一个A到B的导航.这种导航关系使 ...

  2. python生成表格文件_python 读取excel文件生成sql文件实例详解

    python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次.这次是为了从excel文件中读取数据然后写入到数据库中.这个逻辑用java来写的话就太重了,所以 ...

  3. python动态图表变化_Python数据可视化 pyecharts实现各种统计图表过程详解

    Python数据可视化 pyecharts实现各种统计图表过程详解 发布时间:2020-09-10 04:53:26 来源:脚本之家 阅读:78 1.pyecharts介绍 Echarts是一款由百度 ...

  4. python数值类型教程_Python数值类型 int、float、complex 详解

    Python数值类型 int.float.complex 详解 Python数值类型:int.float.complex 在Python程序中,int.float和complex是三种十分重要的数值类 ...

  5. python io密集 多线程_python多进程和多线程究竟谁更快(详解)

    python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为 ...

  6. python hook pc微信_python实现微信跳一跳辅助工具步骤详解

    说明 1.windows上安装安卓模拟器,安卓版本5.1以上 2.模拟器里下载安装最新的微信6.6.1 3.最好使用python2.7,python3的pyhook包有bug,解决比较麻烦 步骤 1. ...

  7. python编写病毒扫描器_python实现集中式的病毒扫描功能详解

    本文实例讲述了python实现集中式的病毒扫描功能.分享给大家供大家参考,具体如下: 一 点睛 本次实践实现了一个集中式的病毒扫描管理,可以针对不同业务环境定制扫描策略,比如扫描对象.描述模式.扫描路 ...

  8. python 内存分析工具_python内存监控工具memory_profiler和guppy的用法详解

    python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用.python循环引用的变量不会被回收,这会导致程序越运行,占用的内存越大.我 ...

  9. python不同颜色数值大小_python matplotlib:plt.scatter() 大小和颜色参数详解

    语法 plt.scatter(x, y, s=20, c='b') 大小s默认为20,s=0时点不显示:颜色c默认为蓝色. 为每一个点指定大小和颜色 有时我们需要为每一个点指定大小和方向,以区分不同的 ...

最新文章

  1. 清空list_3. Python3轻食丨一个故事看懂List所有用法:1年级1班的班级生活
  2. linux——DHCP的配置问题
  3. VTK:Medical之MedicalDemo3
  4. 根据数据集获取概率密度图像和概率分布图像
  5. 我的嵌入式开发之路(.Net Micro Framework)
  6. 【ZOJ - 2949】Coins of Luck (概率dp,期望)
  7. ==与equal在java中应用的感悟
  8. mui 获取地图当前位置和经纬度
  9. python标准库之参数解析库
  10. Python matplot画散列图
  11. MySQL数据操作:增删改查
  12. 创业型 APP 如何筛选合适的推送平台
  13. gvim 启动 全屏
  14. ae遮罩路径图形扭曲插件BAO Boa
  15. R语言使用order函数对dataframe数据进行排序、基于单个字段(变量)进行升序排序(ASCENDING)
  16. Kaggle Quora-如何快速进行数据分析 #0
  17. python unit test什么意思_python中的unittest有什么作用
  18. python二级题库(百分之九十原题) 刷题软件推荐 第六套
  19. Centos挂载iscsi存储(浪潮存储)
  20. 卡塔尔世界杯进入倒计时,万人观赛的直播体验如何保障?

热门文章

  1. 【论文复现】使用RCNN进行文本分类
  2. cms是什么意思啊_美团面试官问我:ZGC 的 Z 是什么意思?
  3. Facebook广告账号主页创建时,其实还有这些小知识!
  4. python 矩阵元素如何表示_python 怎么给矩阵里的每一个元素赋值
  5. 吴恩达机器学习总结一:初识机器学习
  6. 【Python3爬虫】用Python中的队列来写爬虫
  7. [雪峰磁针石博客]2018最佳人工智能数据采集(爬虫)工具书下载
  8. UWP 流畅设计中的光照效果(容易的 RevealBorderBrush 和不那么容易的 RevealBackgroundBrush)...
  9. 02-NLP-04基于统计的翻译系统-03-短语翻译表构造——短语抽取
  10. 性能测试:基础(3)