python 装饰器的详细理解【多次实验】
demo:
# 装饰器其实就是对闭包的使用
print('haha嘻嘻')
def hot():
print('知道')
def dec(fun):
print("call dec")
def in_dec():
print("call in_dec")
# fun()
# 必须加上返回语句,不然的话会默认返回None
return in_dec
hot()
@dec
def fun():
print("call fun") fun()
# 注意上面的返回语句加上还有不加上的时候这一句执行的区别
print(type(fun))
fun()
运行结果:
haha嘻嘻
知道
call dec
call in_dec
<class 'function'>
call in_dec
执行顺序:
2——12——3,4——13——5,6——11——17——7,8——19——20——7,8
如果第7行将‘ # ’ 号去掉
则执行顺序:
2——12——3,4——13——5,6——11——17——7,8,9——14,15——19——20——7,8,9——14,15
发现:
1. python从上到下执行程序
2. 在装饰器前如果有需要执行的语句时,先完成前面语句的执行,在执行装饰器、
3. 执行装饰器时,必须携带参数【根据多次实验,必须含参,必须返回内容(返回的内容可以是值也可以是函数,是返回给装饰器装饰的函数的,也就是复制给装饰器装饰的函数的,所以必须返回,否则报错),而且该参数名可以随便取,但参数都是代表装饰器装饰的函数】
注意:如果装饰器返回内容为装饰器携带的参数,则返回的内容仍然为装饰器装饰的函数的,即当执行装饰器装饰的函数时,仍然执行本身
4. 再继续往下执行
原理:
在第三步中,@hahah => fun = dec(fun) ,到时候fun执行时是执行dec函数返回的数据
python 装饰器的详细理解【多次实验】的更多相关文章
- python装饰器的详细解析
什么是装饰器? python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能. 这个函数的特殊之处在于 ...
- Python装饰器的通俗理解
转载:http://blog.csdn.net/u013471155 在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略 ...
- (一)Python装饰器的通俗理解
在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Py ...
- python装饰器的简单理解
如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 装饰器的使用方法很固定: 先定义一个装饰函数(帽子)(也可以用类.偏函数实现) 再定义你 ...
- 个人关于python装饰器的白痴理解
无参数装饰器 对于python小白来说,python的装饰器简直让人懵逼,不知如何理解,其实按照装饰器的字面意思, 就是把自己定义的函数装饰一遍,然后返回一个新的函数(注意是新的,已经不是本来定义的函 ...
- Python装饰器的深入理解
装饰器 #装饰器:本质上是函数,(装饰其他函数)就是为其他函数添加附加功能 #原则: 1.不能修改被装饰的函数的源代码 # 2.不能修改被装饰的函数的调用方式 #实现装饰器知识储备 #1.函数即变量 ...
- python 装饰器 (个人理解就是前置的内建函数)
感谢有篇文件详细介绍[简单 12 步理解 Python 装饰器]http://python.jobbole.com/85056/ 1.首先介绍内建函数 2.转换为装饰器 3.执行顺序 4.装饰器实用
- 关于python装饰器(Decorators)最底层理解的一句话
一个decorator只是一个带有一个函数作为参数并返回一个替换函数的闭包. http://www.xxx.com/html/2016/pythonhexinbiancheng_0718/1044.h ...
- 如何理解Python装饰器
如何理解Python装饰器?很多学员对此都有疑问,那么上海尚学堂python培训这篇文章就给予答复. 一.预备知识 首先要理解装饰器,首先要先理解在 Python 中很重要的一个概念就是:“函数是 F ...
随机推荐
- JavaScript设计模式-18.享元模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 十分有趣的this指向题
var num=5;//9 =>++this.num=>10 var obj={ num:3, fn:function() { num = 9;//window.num=9 (functi ...
- unity代码创建草和模拟风的效果
void Start() { Test4(); } //草 private Vector3[] grassArray = new Vector3[7]; private GameObject gras ...
- MySQL Group Replication 介绍
2016-12-12,一个重要的日子,mysql5.7.17 GA版发布,正式推出Group Replication(组复制) 插件,通过这个插件增强了MySQL原有的高可用方案(原有的Replica ...
- 深入理解java集合框架之---------Linked集合 -----构造函数
linked构造函数 1.LinkedList(): 构造一个空列表的集合 /** * 序列化 */ private static final long serialVersionUID = 1090 ...
- 数据存储之第三方FMDB优化
最近项目要用到数据库,采用的是第三方FMDB, 之前做C#时用过sqlHelper,自己就按着sqlHelper的思路封装了一下,封装的也比较简单,看到网上有一些根据FMDB封装的ORM框架,但基本都 ...
- IOS bug之Code Sign error:Provisioning profile
刚才解决一个版本冲突的bug,记在了博客里,这让我想起了另外一个bug,当时犹豫公司的开发者账号过期了,我打开应用运行时提示Code Sign error:Provisioning profile ...
- sublime text3 破解及常用插件
sublime text3 下载 破解 submelime Text > About sublime Text //看是否注册并 查看当前的版本 然后百度或google搜索 'sublime t ...
- java常见异常(转载)
版权声明: https://blog.csdn.net/qq_32595075/article/details/80059834 一般面试中java Exception(runtimeExceptio ...
- Code Signal_练习题_alternatingSums
Several people are standing in a row and need to be divided into two teams. The first person goes in ...