装饰器和闭包有很大的相关性,可以这么说,就是当外部函数后面的参数填入的是另一个函数的名称时(并且最多只能有一个参数),称之为装饰器,也可以说装饰器就是特殊的闭包。
可以用如下方法进行分析:

def decorator(func):def inner(a):print('this is a new method')func(a)return innerdef add_1(num):res = num + 1print(res)# add_1后面一定不能带括号,带括号代表执行了方法
end = decorator(add_1)
end(1)

这里输出的结果是:

这里就实现了没有改变add_1函数的代码,给该函数增加了一个功能:this is a new method,这就是装饰器的作用,给别的函数增加额外功能而不改变别的函数的代码。
现在做具体的debug分析:
在执行具体命令之前,这两个函数对象已经存储在了内存当中:

下来开始执行end = decorator(add_1)任务(这一步就是关键的装饰环节):


再执行最后一行命令:end(1)
这时直接步入inner函数,说明这时候的end相当于inner对象,而且此时func已经将add_1函数存入:

先执行打印,再执行func(a)

执行func(a)时步入add_1函数:

将结果打印输出,此时func(a)代码执行完毕,end(1)也执行完毕输出结果:

语法糖效果

如果每次装饰函数都要写一个装饰的代码(即end = decorator(add_1)),会略显麻烦,此时我们可以通过下述方法简化代码:

def decorator(func):def inner(a):print('this is a new method')func(a)return inner@decorator
def add_1(num):res = num + 1print(res)# add_1后面一定不能带括号,带括号代表执行了方法
add_1(1)

@加装饰器名字即可,输出与第一个示例输出一样。
可以用debug模式下的一个关键步骤解释该语法糖:

在执行add_1(1)这个命令时add_1函数已经成为了一个decorator.inner对象,此时执行的第一步直接是如下步骤:

python——装饰器和语法糖效果相关推荐

  1. python高阶函数闭包装饰器_5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器...

    一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰 ...

  2. python装饰器语法糖_最全python装饰器的各种写法

    装饰器是最容易在我们项目编写上出现的内容,结实的掌握这部分内容,对我们的代码是否能顺利编写时非常重要的,下面就关于python装饰器问题,给大家最详细介绍. 装饰器的示例代码# 定义装饰器 def d ...

  3. python装饰器作用-Python装饰器用法实例总结

    一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.简单的说装饰器就是一个用来返回函数的函数 ...

  4. python装饰器原理-深入理解 Python 装饰器

    作者简介 曾凡伟,携程信息安全部高级安全工程师,2015年加入携程,主要负责安全自动化产品的设计和研发,包括各类扫描器.漏洞管理平台.安全 SaaS 平台等. Python 是一门追求优雅编程的语言, ...

  5. python装饰器实例-Python装饰器用法实例总结

    本文实例讲述了Python装饰器用法.分享给大家供大家参考,具体如下: 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能, ...

  6. 什么是python装饰器_深入理解 Python 装饰器

    作者简介 曾凡伟,携程信息安全部高级安全工程师,2015年加入携程,主要负责安全自动化产品的设计和研发,包括各类扫描器.漏洞管理平台.安全 SaaS 平台等. Python 是一门追求优雅编程的语言, ...

  7. python装饰器与闭包_Python:函数装饰器和闭包

    摘自<流畅的python> 7.1 装饰器基础知识 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数). 装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用 ...

  8. 【Python】一文弄懂python装饰器(附源码例子)

    目录 前言 一.什么是装饰器 二.为什么要用装饰器 三.简单的装饰器 四.装饰器的语法糖@ 五.装饰器传参 六.带参数的装饰器 七.类装饰器 八.带参数的类装饰器 九.装饰器的顺序 总结 写在后面 前 ...

  9. 如何理解 Python 装饰器

    装饰器(decorator)是一种高级Python语法.可以对一个函数.方法或者类进行加工.在Python中,我们有多种方法对函数和类进行加工,相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰 ...

最新文章

  1. SAP MM 物料库存转固定资产业务操作以及相关财务凭证
  2. 固定资产制作修理费应如何入账
  3. C语言学习之用指针处理,输入a和 b两个整数,按先大后小的顺序输出a和 b
  4. java学习之三种常用设计模式
  5. [SDOI2014]旅行
  6. 帆软决策报表嵌入html,在决策报表中使用网页框控件
  7. JVM(2)--一文读懂垃圾回收
  8. 转的:SQL执行提高效率的多种方法
  9. HDU1230 火星A+B【进制】
  10. vue 源码 断点调试
  11. 删库跑路是程序员最后的倔强?
  12. Google Adsense的技巧、诀窍和秘密
  13. java爬虫 抓取国家统计局:统计用区划代码和城乡划分代码(抓取省市区镇县办事处村委会数据)生成json
  14. gis与一般计算机应用系统有哪些异同,地理信息系统概论课后习题全部答案 黄杏元著...
  15. windows 7 多国语言包官方下载资源共享(32/64位)
  16. jenkins with ant 和 invoke ant
  17. php htmlpurifier,php – HtmlPurifier – 允许数据属性
  18. java apache commons_Apache commons(Java常用工具包)简介
  19. Linux pv显示进度条命令
  20. QorIQ LX2160A安全引擎操作模式

热门文章

  1. Java黑皮书课后题第4章:*4.7(顶点坐标)假设一个正五边形的中心位于(0,0),其中一个点位于0点位置。编写程序,提示用户输入正五边形外接圆的半径,显示p1到p5的5个坐标,保留两位小数
  2. polymer 绑定html元素,使用Polymer扩展本机HTML元素
  3. 返回的到的数据做整合_Excel玩转数据分析常用的43个函数!(建议收藏)
  4. Qt中moc问题(qt moc 处理 cpp)
  5. 视觉编码(Visual Encoding)
  6. 通过JAVA对HDFS进行操作管理插件
  7. charles基本使用文档
  8. 第九十三节,html5+css3移动手机端流体布局,基础CSS,头部设计,轮播设计,底部设计...
  9. Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析
  10. 牛客网(剑指offer) 第十三题 调整数组顺序使奇数位于偶数前面