简单了解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的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
python 捕获 shell/bash 脚本的输出结果实例
Jan 04 Python
Python实现多并发访问网站功能示例
Jun 19 Python
R语言 vs Python对比:数据分析哪家强?
Nov 17 Python
使用python爬虫获取黄金价格的核心代码
Jun 13 Python
Python实现深度遍历和广度遍历的方法
Jan 22 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
在django中使用post方法时,需要增加csrftoken的例子
Mar 13 Python
500行python代码实现飞机大战
Apr 24 Python
Python字符串函数strip()原理及用法详解
Jul 23 Python
python可视化大屏库big_screen示例详解
Nov 23 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
图书管理程序(三)
2006/10/09 PHP
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
php中对2个数组相加的函数
2011/06/24 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
express框架下使用session的方法
2019/07/31 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
Python下的twisted框架入门指引
2015/04/15 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
Python序列类型的打包和解包实例
2019/12/21 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
8和9的加减法教学反思
2014/05/01 职场文书
应届生面试求职信
2014/07/02 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python