就谈个py 的装饰器 decorator
很早很早就知道有这么个 装饰器的东西,叫的非常神秘。
包括c# 和 java 中都有这个东西,
c#中叫做attribut 特性,java中叫做Annotation 注解,在偷偷学习c#教程的时候,我承认我 看了盗版的视频,上边的讲师一带而过,说过这个东西,所以我觉得这个东西很是高达上,这里不说这两个语言,就单说python
python中实现这个 很简单,当然如果支持这种语法的话,方式是一样的。
很多程序员就喜欢把简单的东西弄复杂了,例如我,说了 这么一大堆,还没到正题,只是我要讲起来这个东西太简单,。
我想弄清楚了 几个问题在谈这个东西就比较简单了。
1、装饰器和被装饰的函数
2、装饰器的参数,被装饰函数的参数
3、被装饰函数的返回值
4、装饰器的参数
5、装饰器的返回值
有条例的解释一下这几个问题:
1 def task_log(task): 2 print(task) 3 def decorator(*a, **k): 4 print(a) 5 print(k) 6 return task(*a, **k) 7 return decorator 8 9 @task_log 10 def test(a): 11 print(a) 12 return a
很明显
1、task_log这是个装饰器,test是个被装饰的函数
2、装饰器的参数是task这个函数,被装饰的参数是a
3、被装饰的函数返回值是a,装饰器返回了一个decorator这个函数
调用过程有点小复杂,不过也不是很难理解,
1、调用test函数
2、先调用了装饰器
3、装饰器返回了这个函数的副本
4、实际中调用了这个副本
5、在副本中我们有调用了这个函数
6、一切完事大吉。好像 实现了一个了不起的过程。
这里是py 的装饰器,其他两种语言基本上一样,所以要求在 attribute中或者Annotation 中实现 invoke 这个方法,或者一个接口,等待程序去调用,本质上还是需要一个在这个类或者方法中实现原函数的调用,当然不对之处还请斧正。
不过话又说到py中:
装饰器的执行顺序
最后给出一个 有参数的版本
1 def task_log_para(para): 2 print(para) 3 def wrapping(task): 4 def decorator(*a,**k): 5 print(a) 6 print(k) 7 return task(*a,**k) 8 return decorator 9 return wrapping
课后思考
1、装饰器的参数
2、装饰器的返回值
3、装饰器的执行顺序
另附,除了装饰器可以得到参数以外,还可以为被修饰的函数传递参数,当然是个神奇的事情,enjoy your code~!
转载于:https://www.cnblogs.com/bufubaoni/p/5887479.html
就谈个py 的装饰器 decorator相关推荐
- py函数式编程(高阶函数map/reduce/filter/sorted、闭包函数/返回函数、匿名函数lamber、@装饰器decorator、偏函数functool.partial())
#py函数式编程.py #高阶函数map/reduce/filter/sorted.闭包函数/返回函数.匿名函数lamber.@装饰器decorator.偏函数functool.partial()# ...
- python装饰器-理解Python装饰器(Decorator)
理解Python装饰器(Decorator) Python装饰器看起来类似Java中的注解,然鹅和注解并不相同,不过同样能够实现面向切面编程. 想要理解Python中的装饰器,不得不先理解闭包(clo ...
- python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上
Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...
- [react] 装饰器(Decorator)在React中有什么应用?
[react] 装饰器(Decorator)在React中有什么应用? connect.withRouter,等类似的高阶组件都可以用装饰器来使用 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放 ...
- 如何使用python装饰器_Python学习之如何使用装饰器 @decorator
建议大家在看这篇文章之前还是点击上面这篇文章看一下,先了解一下什么是装饰器之后再看. 猿人学python之我的学习笔记分享:如何使用装饰器 @decorator 上面代码中使用装饰器的方法看起来有点复 ...
- 装饰器Decorator(函数的装饰)
一.LEGB函数作用域的优先级和解析 函数是function的一个对象,被调用完后内部变量就会被回收,被引用的除外(例如return的变量) 1. local :函数内部作用域 2. enclo ...
- python描述器descriptor_python装饰器decorator、描述器descriptor
背景 image.png 装饰器decorator 返回值为另一函数的函数,通常使用 @wrapper语法. 装饰器的常见例子包括 装饰器语法只是一种语法快捷方式,以下两个函数定义在语义上完全等价: ...
- [转载] Python学习笔记——用装饰器decorator和Memoization记忆化提高效率,原理讲清楚了
参考链接: 在Python中使用装饰器进行记忆 Python学习笔记--用装饰器decorator和Memoization记忆化提高效率 装饰器Memoization记忆化运用`functools`中 ...
- Python的装饰器decorator
Python的装饰器decorator 作者:王大为 时间:2016-10-19 一.装饰器的本质 本质:装饰器本身就是一个函数,高阶函数+嵌套函数==>装饰器 原则: * 1.不能修改被装饰函 ...
最新文章
- java 画笔跟swing组件_java组件及事件处理(简单基础的界面操作)1
- linux下用u盘安装xp系统安装教程,全新Linux笔记本电脑用U盘装Win7/XP系统教程
- Linux: shell命令 eval (有图有代码有真相!!!)
- Java volatile关键字
- maven学习(2)
- 20190817:(leetcode习题)旋转图像
- 【leetcode】714. Best Time to Buy and Sell Stock with Transaction Fee
- 如歌将两个数组合并_将数组数据拆分后再合并,作为字典的键,实现多条件数据汇总...
- 阿里舆情︱舆情热词分析架构简述(Demo学习)
- git安装后设置用户名和密码
- Mars说光场(5)— 光场在三维人脸建模中的应用
- 固态硬盘故障检测_固态硬盘有坏道怎么办(ssd坏块检测工具)
- 开源微信小程序源码+小程序游戏代码附搭建框架教程
- word打开文档很久很慢_打开office非常慢怎么回事_电脑打开word文件很慢怎么办
- 2014 抢票工具 纯java
- uni-app实现支付及项目打包上传
- Lambda与Stream流
- 常用sql语句(备忘)
- CAD中怎么识别标高范围?CAD标高范围识别技巧
- 摄影基础之---景深