简单了解python装饰器原理及使用方法


Posted in Python onDecember 18, 2019

这篇文章主要介绍了简单了解python装饰器原理及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖。

装饰器的使用方法很固定:

先定义一个装饰函数(帽子)(也可以用类、偏函数实现)

再定义你的业务函数、或者类(人)最后把这顶帽子带在这个人头上

Python装饰器就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。

这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌“原“”函数的函数。

# 有两个已经实现的方法
def f1():
  print("正常流程1")
def f2():
  print("正常流程2")

# 一、需求 我们在每个方法内部加入一个需求
# 定义了一个函数f3,它的参数是一个函数,然后给这个函数嵌入print("需求")。但是想要拓展这一千万个函数功能,
# 就是要执行一千万次f3()函数,所以这样并不理想!接下来,我们可以试着用装饰器来实现,先看看装饰器最原始的面貌。
def f3():
  print("需求")

def f1():
  f3()
  print("正常流程1")

def f2():
  f3()
  print("正常流程2")
# 二、需求 我们现在不需要之前的那个需求了 需要删除f3()

def f1():
  print("正常流程1")

def f2():
  print("正常流程2")

# 根据 python开放-封闭的原则,有些时候核心代码并不可以直接去改,所以在不改动原代码的情况下,我们可以再定义一个函数
# 这里的f3函数就是最原始的装饰器,它的参数是一个函数,然后返回值也是一个函数。
#
# 其中作为参数的这个函数f1()就在返回函数f4()的内部执行。然后在函数f1()前面加上@f3,
#
# f1()函数就相当于注入增加“需求”功能,现在只要调用f1(),它就已经变身为增加“需求”的函数了,
# (不需要重复执行原函数)。
def f3(fn):
def f4():


print("需求")
   fn()
  return f4

@f3
def f1():
  print("正常流程1")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
调试Python程序代码的几种方法总结
Apr 28 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
分析python请求数据
Aug 19 Python
python中嵌套函数的实操步骤
Feb 27 Python
django重新生成数据库中的某张表方法
Aug 28 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
python实现打砖块游戏
Feb 25 Python
python实现银行实战系统
Feb 26 Python
Python装饰器实现方法及应用场景详解
Mar 26 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
python类共享变量操作
Sep 03 Python
修改Pandas的行或列的名字(重命名)
Dec 18 #Python
Python3直接爬取图片URL并保存示例
Dec 18 #Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 #Python
Python谱减法语音降噪实例
Dec 18 #Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 #Python
使用python 对验证码图片进行降噪处理
Dec 18 #Python
如何使用Python多线程测试并发漏洞
Dec 18 #Python
You might like
php实现webservice实例
2014/11/06 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
javascript 写类方式之九
2009/07/05 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
python编程实现希尔排序
2017/04/13 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
python超时重新请求解决方案
2019/10/21 Python
Python 列表的清空方式
2020/01/13 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
中专生学习生活的自我评价分享
2013/10/27 职场文书
中专生职业生涯规划书范文
2013/12/29 职场文书
售房委托书
2014/08/30 职场文书
2014财务年度工作总结
2014/11/11 职场文书
公司员工手册范本
2015/05/14 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
一条 SQL 语句执行过程
2022/03/17 MySQL