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 ...
随机推荐
- 【数组】Triangle
题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...
- codeblocks 控制台一闪而过
不要点红的运行,那是调试,点绿色的三角形,那才是运行,不会一闪而过
- Session 与 Cookie
Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们本身只是HTTP中的一个配置项,在servlet规范中也只对应一个类而已. 理解 Cookie 通俗地说就是当一 ...
- Java 实现两个整数变量的交换
class OperatorTest { public static void main(String[] args) { int a = 10; int b = 20; System.out.pri ...
- file_get_contents 抓取网页乱码。
iconv string iconv ( string $in_charset , string $out_charset , string $str ) mb_convert_encoding st ...
- MyEclipse部署web项目的关键
我自己的经验: 主要有3点: 自己的代码要正确 数据库服务确保已经启动 确保你的访问路径是正确的 1.自己的代码要正确 比如jdbc驱动,正确的写法:private static final Stri ...
- C# AJAXform上传图片
前台: @{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="vie ...
- WCF 之部署(VS2010)
一. 环境vs2010,WCF应用程序,server 2008 第一步:WCF项目右键点击项目,选择生成部署包,如下图: 第二步:WCF项目上右键,选择:在windows资源管理器中打开文件夹,如下图 ...
- Java基础教程(3)--回顾HelloWorld
在上一篇文章中,我们已经编写了第一个Java程序--HelloWorld,并且对它进行了编译和运行.虽然这个例子很短小,但是它具有一个完整的Java程序所应该具有的结构.在这篇文章中,我将会对这个 ...
- Druid SqlParser理解及使用入门
以前的项目中很少去思考SQL解析这个事情,即使在saas系统或者分库分表的时候有涉及到也会有专门的处理方案,这些方案也对使用者隐藏了实现细节. 而最近的这个数据项目里面却频繁涉及到了对SQL的处理,原 ...