简单了解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发送邮件的实例代码(支持html、图片、附件)
Mar 04 Python
Python中的CURL PycURL使用例子
Jun 01 Python
在Python的Django框架中为代码添加注释的方法
Jul 16 Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
Python中py文件转换成exe可执行文件的方法
Jun 14 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
Dec 23 Python
快速解决jupyter启动卡死的问题
Apr 10 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 Python
GitHub上值得推荐的8个python 项目
Oct 30 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笔记 字符串处理
2010/10/19 PHP
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
php如何调用webservice应用介绍
2012/11/24 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
vue.js路由跳转详解
2017/08/28 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
Python兔子毒药问题实例分析
2015/03/05 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Python创建xml文件示例
2017/03/22 Python
python使用thrift教程的方法示例
2019/03/21 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
母亲80寿诞答谢词
2014/01/16 职场文书
小学生家长寄语
2014/04/02 职场文书
软件项目开发计划书
2014/05/01 职场文书
在校实习生求职信
2014/06/18 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
综合素质自我评价评语
2015/03/06 职场文书
2015年加油站工作总结
2015/05/13 职场文书
建议书的格式及范文
2015/09/14 职场文书
导游词之桂林
2019/08/20 职场文书