1 装饰器介绍

如果有一批函数都是需要前置或者后置的工作,那么我们可以统一使用装饰器进行修饰。

1.1 不用装饰器的版本

def decorator(fn, name):print("I'm in", name)    return fn(name)def outer_fn(name):print("I'm out of",name)decorator(outer_fn,'China')'''
I'm in China
I'm out of China
'''

这里相当于把outer_fn这个函数作为参数传入decorator中。

decorator 函数会先执行【  print("I'm in", name)    】这一条语句

然后执行 【  fn(name)   】,也就是【  outer_fn(name)   】

1.2 使用装饰器

我们使用装饰器有一个特别的写法,就是在你要修饰(嵌套)的 outer_fn 上面写上 @decorator。

   @ 后面就是你定义的那个装饰器 function 的名字。 比如这里我用的是 def decorator() 那么 @ 后面就是 decorator 这个名字了。

寓意着,我要把 decorator 这个 function 套在 outer_fn 外面。

def decorator(fn):def wrapper(name):print("I'm in", name)   return fn(name)return wrapper@decorator
def outer_fn(name):print("I'm out of",name)outer_fn('China')'''
I'm in China
I'm out of China
'''

相当于执行了

(1)decorator(outer_fn)

(2)在decorator里面执行了 wrapper("China") ,先 【print("I'm in", name)  】,再【fn(name)】,即【print("I'm out of",name)】

当然,装饰器还可以在要装饰的函数后面执行一些操作

def decorator(fn):def wrapper(name):print("I'm in", name)   f=fn(name)print("I'm also in", name)return freturn wrapper@decorator
def outer_fn(name):print("I'm out of",name)outer_fn('China')'''
I'm in China
I'm out of China
I'm also in China
'''

参考资料:

套娃的装饰器 - 交互式学Python | 莫烦Python (mofanpy.com)

python 笔记:装饰器相关推荐

  1. Python: 使用装饰器“@”取得函数执行时间

    class A(): Python: 使用装饰器"@"取得函数执行时间 - oldJ的学习笔记 - 博客频道 - CSDN.NET Python: 使用装饰器"@&quo ...

  2. Python自定义装饰器

    文章目录 1.闭包 2.不带参数的装饰器 3.带参数的装饰器 4.不定长参数的装饰器 5.多重装饰器修饰 6.返回值是装饰器 7.装饰器类 Python学习笔记-装饰器 装饰器:从生活角度理解,是对一 ...

  3. Python之装饰器

    Python之装饰器 在不修改函数调用方式的前提下,也不能修改函数内部源代码!!!! 例如: 在每个季度公司发绩效,统计每个人的代码执行效率.咱们总不能是每个函数里加time模块吧. import t ...

  4. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  5. 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...

  6. Python的装饰器

    详解Python的装饰器 本文源码 https://github.com/tobyqin/python_decorator Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都 ...

  7. python 日志 装饰器_【Python】装饰器实现日志记录

    好的日志对一个软件的重要性是显而易见的.如果函数的入口都要写一行代码来记录日志,这种方式实在是太低效了,但一直没有找到更好的方法.后来用python写一些软件,了解到python的装饰器功能时,突然人 ...

  8. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...

  9. python 类装饰器 __set___python装饰器代替set get方法实例

    对于变量的访问和设置,我们可以使用get.set方法,如下: class student: def __init__(self,name): self.__name = name def get_na ...

  10. 关于Python的装饰器(1)

    Python的装饰器的概念,一直有点微妙.之前在StackOverflow上看过一篇感觉说明的很清楚的介绍: *A decorator must accept a function as an arg ...

最新文章

  1. Java 最常见的 10000+ 面试题及答案整理:持续更新
  2. 写一个函数days,实现计算本年第几天
  3. UVa 11520 Fill the Square 填充正方形
  4. java中文字符怎么保证出现正确_JAVA中文字符编码问题详解
  5. 【APICloud系列|38】 微信登录分享、QQ登录分享实现方法
  6. java ee 值范围_JAVAEE之内置对象和属性范围
  7. 分组框 GroupBox
  8. git-分支管理策略-合并分支时创建新的版本
  9. 计算机接口实验0832,现代计算机接口实验 (四)0832实验
  10. 一个普通人,想改变命运,最靠谱的3种方式
  11. 关于代码调用SSP获取UserProfile出错的解决方案
  12. java求闰年_Java判断闰年的2种方法示例
  13. 明日之后最好看的房子又来啦:情侣专属泰坦尼克号造型登场
  14. 36 岁开发者应聘被拒?这 3 位 50 岁程序员的生存秘籍送给你!
  15. 相机标定与3D重建(0)标定板说明
  16. 离散制造,重复制造和流程制造总结
  17. 【百强榜单】2018第六届上汽设计国际挑战赛 全球百强作品正式公布!
  18. 分布式快速批量获取网站标题关键字描述(TDK)接口api文档说明
  19. 【电力电子】【2014】三相电压型逆变器在独立和并网模式下的动态建模与分析
  20. VPS2104 小功率反激电源控制器 4-100VIN/120V/4A 功率管

热门文章

  1. 16、ASP.NET MVC入门到精通——MVC过滤器
  2. zabbix企业应用之bind dns监控(转)
  3. Grub2倒计时失效
  4. 我国中等收入群体为应付生活压力 透支半生财富
  5. 《剑指offer》第1~11题:刷题week1[C++题解]
  6. OSError: Cannot initialize new instance of inotify, Errno=Too many open files (EMFILE) 问题解决
  7. java remove removeat_2016.3.12 Java中ArrayList类详解(转)
  8. java rest post list,Java RestTemplate.postForLocation方法代码示例
  9. ue4小白人骨骼定义_UE4角色骨架创建流程_资源库
  10. 图像识别python cnn_MINIST深度学习识别:python全连接神经网络和pytorch LeNet CNN网络训练实现及比较(一)...