在不修改原函数的情况下,来对函数进行扩展

在定义函数时,可以通过@装饰器,来使用指定的装饰器,来装饰当前的函数
可以同时为一个函数指定多个装饰器,这样函数将会安装从内向外的顺序被装饰
(*args , **kwargs)用于接收位置参数和关键词参数

def fn1(x):def bread(*args , **kwargs):print('上层面包')y = x(*args , **kwargs)print('下层面包')return y return bread # 返回新函数def fn2(q):def vegetables(*args , **kwargs):print('上层蔬菜')z = q(*args , **kwargs)print('下层蔬菜')return zreturn vegetables # 返回新函数# 加了这个装饰器 就相当于 fn3 = fn1(fn3)
@fn1 # 添加面包
def fn3():  # 添加鸡肉print("鸡肉")
# 加了这个装饰器 就相当于 fn3 = fn1(fn2)
@fn1 # 添加面包
@fn2 # 添加蔬菜
def fn4():  # 添加牛肉print('牛肉')fn3()
print("-" * 20, '第一份餐点已经做好,请取餐。')
fn4()
print("-" * 20, '第二份餐点已经做好,请取餐。')
上层面包
上层蔬菜
牛肉
下层蔬菜
下层面包
-------------------- 第一份餐点已经做好,请取餐。
上层面包
鸡肉
下层面包
-------------------- 第二份餐点已经做好,请取餐。

python装饰器@深度加工(三分钟读懂)相关推荐

  1. python类内置装饰器(一分钟读懂)

    property装饰器,用来将一个get方法,转换为对象的属性 添加为property装饰器以后,我们就可以像调用属性一样使用get方法 使用property装饰的方法,必须和属性名是一样的 sett ...

  2. python高阶函数(三分钟读懂)

    python高阶函数(三分钟读懂) 函数式编程 Python中,函数是一等对象 一等对象:具有特点 ① 对象是在运行时创建的 ② 能赋值给变量或作为数据结构中的元素 ③ 能作为参数传递 ④ 能作为返回 ...

  3. 三分钟读懂新一代人工智能——ChatGPT

    2022年以来,AI开始在很多贴近消费者的领域发挥越来越大的作用,之前我写过一篇文章<一分钟学会AI绘画和创作>,很多朋友纷纷尝鲜. 最近一个月以来,OpenAI公司推出的智能机器人Cha ...

  4. python装饰器实例-python 装饰器(三):装饰器实例(一)

    示例 7-15 定义了一个装饰器,它会在每次调用被装饰的函数时计时,然后把经过的时间.传入的参数和调用的结果打印出来. 示例 7-15 一个简单的装饰器,输出函数的运行时间 importtimedef ...

  5. python 函数中参数的传递方式(三分钟读懂)

    python 函数中参数的传递方式 第一种:指定默认值 def fn1(a = 1): # 函数中的(a)是形参 和外面的变量无关 (这里的是定义函数中指定默认值)print("fn1&qu ...

  6. python内置模块_三分钟读懂Python内置模块collections

    collections模块 Python内置模块,在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.d ...

  7. python封装:隐藏对象中的属性或方法(三分钟读懂)

    封装:隐藏对象中的属性或方法 隐藏对象中的属性 隐藏:- 将对象的属性名,修改为一个外部不知道的名字 我们使用时,有特殊方法来处理获取(修改)对象中的属性 获取(修改)对象中的属性 需要提供一个get ...

  8. python作用域(scope)(三分钟读懂)

    作用域(scope) 作用域指的是变量生效的区域,在Python中一共有两种作用域 1.全局作用域 全局作用域在程序执行时创建,在程序执行结束时销毁 所有函数以外的区域都是全局作用域 在全局作用域中定 ...

  9. python面向对象是什么?面试技巧(三分钟读懂)

    面向对象 对象,现实世界,随处可见的一种事物就是对象. 对象 是事物存在的实体,如人类,汽车,动物,水果,这些都有事一个抽象的类别 实物是类的具体存在 1.类是对象的抽象集合, 2.类的具体表现是对象 ...

最新文章

  1. __clone class php_PHP中__clone()方法详解
  2. 利用FluidMoveBehavior制作出手机通讯录平滑的效果
  3. 一名全栈工程师的必备“百宝箱”
  4. 360互联网训练营第十四期——大数据技术开放日
  5. PreparedStatement 防止 SQL 注入原理
  6. VS2008 ~ VS2019下载地址
  7. flutter-谷歌移动UI框架
  8. 【Mysql 错误定位】语法错误
  9. Apache详解(一)Internet和HTTP协议
  10. Dell intel i5 1135笔记本 win10 ubuntu18.04双系统
  11. Java中split的用法
  12. 语文老师之二小白的边城
  13. 处理告警“ warning #69-D integer conversion resulted in truncation”的方法
  14. Typhon升级到5.8,编译原来程序出现提示:Compilation raised exception internally
  15. 网络直播对网络的要求有多高
  16. 星空样式(HTML)
  17. GitHub 近 70K 星,命令行的艺术!
  18. 简易版------打砖块
  19. 谭浩强《C语言程序设计 》习题 6-3
  20. 15秒视频播放量超5500万,如何抢占涨粉又爆赞的流量密码?

热门文章

  1. linux平台下MongoDB安装和环境搭建及踩过的坑
  2. TCP/IP学习笔记(3)----IP,ARP,RARP协议
  3. 设计模式之——bridge模式
  4. 关于自动装箱和自动拆箱
  5. algorithm design manual: 8-19
  6. tftp的安装、设置以及put、get传输实验
  7. (原创)C++ IOC框架
  8. vim代码自动补全函数提示设置
  9. 知道世界越大,就会觉得你越小
  10. 帆软报表(FineReport) 的初步学习和使用