当前位置: 首页 > 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/news/324321.html

相关文章:

  • 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
  • 【分布式微服务云原生】10分钟揭秘Dubbo负载均衡:如何让服务调用更智能?
  • 发明专利实用新型专利外观设计专利
  • List几种遍历方法速度
  • 【GUI设计】基于图像分割的GUI系统(3),matlab实现
  • leetcode91. 解码方法,动态规划
  • uniapp设置从右上角到左下角的三种渐变颜色
  • 滚雪球学MySQL[2.1讲]:基础SQL操作
  • 如何使用 Go 获取你的 IP 地址
  • MMD模型及动作一键完美导入UE5-IVP5U插件方案(二)
  • Vue3中的30个高频重点面试题