当前位置: 首页 > article >正文

python高级用法_装饰器

装饰器

装饰器其实就是一种闭包,其功能就是在不破坏目标函数原有代码和功能的前提下,为目标函数增加新功能

案例

希望给sleep函数,增加一个功能:

  • 在调用sleep前输出:我要睡觉了
  • 在调用sleep后输出:我起床了
def sleep():
    import random
    import time
    print("睡眠中....")
    time.sleep(random.randint(1, 5))


print("我要睡觉了")
sleep()
print("我起床了")

这种方式不够优雅

使用装饰器来实现

装饰器的一般写法(闭包写法)

定义一个闭包函数,在闭包函数内部:

  • 执行目标函数
  • 并完成功能的添加
def sleep():
    import random
    import time
    print("睡眠中....")
    time.sleep(random.randint(1, 5))


def outer(func):
    def inner():
        print("我要睡觉了")
        func()
        print("我起床了")

    return inner


f = outer(sleep)
f()
装饰器的高级写法
def outer(func):
    def inner():
        print("我要睡觉了")
        func()
        print("我起床了")

    return inner


@outer
def sleep():
    import random
    import time
    print("睡眠中....")
    time.sleep(random.randint(1, 5))


sleep()


http://www.kler.cn/a/324321.html

相关文章:

  • 【STM32】MPU6050简介
  • mybatis-plus: mapper-locations: “classpath*:/mapper/**/*.xml“配置!!!解释
  • 小白进!QMK 键盘新手入门指南
  • 大数据实验9:Spark安装和编程实践
  • Elasticsearch 8.16.0:革新大数据搜索的新利器
  • 图像深度与像素深度的辨析
  • text2sql方法:NatSQL和DIN-SQL
  • 【Redis 源码】4adlist列表.md
  • 3. 轴指令(omron 机器自动化控制器)——>MC_MoveVelocity
  • 生物信息常用编辑器:轻量/强大/可定制/跨平台支持的编辑器之神 - vim
  • 前端开发设计模式——单例模式
  • golang 如何生成唯一的 UUID
  • jQuery——属性
  • Webpack教程-概述
  • CF补题第二天
  • 【C++篇】迈入新世界的大门——初识C++(上篇)
  • element下拉框联动 或 多选 回显数据后页面操作不生效问题解决
  • 汇编语言 访问CMOS RAM并打印时间(未完)
  • 6-演员和蓝图
  • 计算机毕业设计 基于Python的热门微博数据可视化分析系统的设计与实现 Python+Django+Vue 可视化大屏 附源码 讲解 文档
  • MySQL—触发器详解
  • vector的模拟实现以及oj题(2)
  • Linux —— Socket编程(二)
  • NetworkPolicy访问控制
  • Windows 开发工具使用技巧
  • PAT甲级1003Emergency