【李刚-21天通关Python-27】之 案例实操:函数装饰器应用

一、函数装饰器的广泛应用

  • @staticmethod@classmethod 的本质就是函数装饰器
  • staticmethod 和 classmethod 都是Python的内置函数
  • 在Python帮助文档中查看函数装饰器

二、函数装饰器的本质

  • 当程序使用“@函数”(比如函数A)装饰另一个函数(比如函数B)时,实际上完成如下两步:
  • (1)将被修饰的函数(函数B)作为参数传给@符号引用的函数(函数A)
  • (2)将函数B替换(装饰)成第一步的返回值

代码1:

# foo函数将作为函数装饰器使用
#作为函数装饰器使用的函数,它必须定义一个形参
def foo (fn):print ("foo函数")print(fn)return 'fkjava'@foo
def bar ():print("bar函数")# (1)将bar函数作为参数传给装饰器函数foo
# (2)bar函数将被替换成foo函数的返回值
# 由于bar函数其实已经被替换成了fkjava,因此bar函数不能被调用print(bar)  # foo函数# <function bar at 0x0000000001E686A8># fkjava

代码2:

def foo (fn):print ("foo装饰器函数")def noname(*arg):print("----noname函数----")fn(*args)return noname@foo
def test (a, b):print("bar函数")print("参数a: ", a)print("参数B: ", B)test(2, 4)  # foo装饰器函数# ----noname函数----# bar函数# 参数a: 2# 参数b: 4

三、函数装饰器与AOP的关系

  • 通过使用函数装饰器,可在被修饰函数之前、之后、抛出异常后增加某种处理逻辑的方式,就是其他编程语言中的AOP(Aspect Orient Programming,面向切面程序)
def foo (fn):def noname(*arg):print("----模拟在目标函数之前织入的Advice----")fn(*args)print("----模拟在目标函数之后织入的Advice----")return noname@foo
def test (a, b):print("bar函数")print("参数a: ", a)print("参数B: ", B)test(2, 4)  # ----模拟在目标函数之前织入的Advice----# bar函数# 参数a: 2# 参数b: 4# ----模拟在目标函数之后织入的Advice----

【李刚-21天通关Python-27】之 案例实操:函数装饰器应用相关推荐

  1. 【李刚-21天通关Python】第四章:函数

    [李刚-21天通关Python]第四章:函数 第四章:函数 函数入门与定义函数 多返回值函数与递归函数 关键字参数与参数默认值 参数收集和逆向参数收集 变量作用域 局部函数 实操:定义计算N的阶乘的函 ...

  2. 【李刚-21天通关Python】第一章:Python入门与字符串

    [李刚-21天通关Python]第一章:Python入门与字符串 第一章:Python入门与字符串 数据类型 字符串 运算符 实操:简易计算器 & 进制转换 章节分篇链接: [李刚-21天通关 ...

  3. 【李刚-21天通关Python-03】之 运算符

    [李刚-21天通关Python-03]之 运算符 一.赋值运算符 1.赋值运算符是 "=" 2.作用:将等号右边的值"装入"左边的变量中 二.算术运算符 算术运 ...

  4. 【李刚-21天通关Python-23】之 定义类

    [李刚-21天通关Python-23]之 定义类 一.类和对象 两个重要概念:类(class)和对象(object,也被称为实例,instance) 类是某一批对象的抽象,可以将类理解成某种概念 对象 ...

  5. python function at 0x00000_Python 中的函数装饰器和闭包

    本文是<流畅的Python>第7章的学习笔记. 函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另 ...

  6. python 函数修饰器 父类_手把手教你学python第十四讲(函数装饰器,super用法和时间处理)...

    文中有些字在图中是因为每篇文章最多100张图片,我把有的小图片和文字一起截图了,文中所有的引用都会标出原文网址,除此以外都是作者原创. 有时候会在文章最前或者最后补充一些知识或者把前面说的有问题的地方 ...

  7. python装饰器-Python @函数装饰器及用法(超级详细)

    前面章节中,我们已经讲解了 Python 内置的 3 种函数装饰器,分别是 @staticmethod.@classmethod 和 @property,其中 staticmethod().class ...

  8. 视频教程-21天通关Python(课+书,含邮寄)-Python

    21天通关Python(课+书,含邮寄) 专注提供优质教学内容 CSDN就业班 ¥119.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠,最少 ...

  9. python四大高阶函数_详谈Python高阶函数与函数装饰器(推荐)

    一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首 ...

最新文章

  1. 爬虫9-淘宝商品信息定向爬虫
  2. ISE 14.7安装教程最新版(Win10安装)——解决Win10安装完后打不开快捷方式的方法
  3. java王子救公主的游_计蒜客 王子救公主(DFS)
  4. target和currentTarget
  5. 奇奇怪怪的小姿势——关于UI的各种Position
  6. 从浪漫走向坚韧:开源数据库的演变
  7. 您真的理解了SQLSERVER的日志链了吗?
  8. php携程语比,PHP 协程
  9. (二)使用CycleGAN进行移动风格迁移
  10. 机器学习-斯坦福:学习笔记7-最优间隔分类器问题
  11. MySQL 调优工具
  12. 三十不惑:情商智商决定我能走多快,德商(基本素质)决定我能走多远
  13. 2021 年 15 款适用于 PC 和 Mac 的最佳 Android 模拟器
  14. BZOJ4622 [NOI 2003] 智破连环阵
  15. 自我觉知和自我知觉(self-perception)
  16. String类型转Long类型需要注意的问题
  17. 为什么人人都应该玩儿点儿DIY?
  18. centos7 kubernetes
  19. mixamo 导出的模型没有贴图
  20. FP-growth:FP树的构建

热门文章

  1. GlobeLand30影像下载、去除黑边、镶嵌、裁剪、重分类
  2. 不为人知的腾讯创业史---蜗牛创业网
  3. java模板velocity,java模板引擎:velocity
  4. 蓝桥杯 算法训练 无聊的逗
  5. ZEGO 2018上海音视频技术嘉年华 活动回顾
  6. QPrintPreviewDialog 打印预览使用实例
  7. oracle silent新增实例
  8. 如何用linux搭建简单的论坛
  9. 矛与盾---走出软件作坊:三五个人十来条枪 如何成为开发正规军(三十五)
  10. 跟java有关的搞笑句子,有关搞笑的经典语句