python基础语法学习: 装饰器

文章目录

装饰器

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

现在有一个 sleep 函数

python 复制代码
def sleep(): 
    import random
    import time 
    print("sleeping")
    time.sleep(random.randint(1, 5))

现在希望给 sleep 函数增加一个新功能:

  • 在调用 sleep 前输出: I will sleep
  • 在调用 sleep 后输出: I wake

有下面的代码:

python 复制代码
print("I will sleep")
sleep() 
print("I wake")

但是这样的方式非常的不优雅,那有没有其他方式呢, 有的, 可以使用 装饰器来实现

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

python 复制代码
def sleep():
    import random
    import time
    print("sleeping")
    time.sleep(random.randint(1, 5))

def outer(func):
    def inner():
        print("I will sleep")
        func()
        print("I wake")
    return inner

fn = outer(sleep)
fn()

装饰器的语法糖写法

python 复制代码
def outer(func):
    def inner():
        print("I will sleep")
        func()
        print("I wake")
    return inner

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

sleep() 

使用@outer, 定义在目标函数之上

这种写法与装饰器的一般写法的调用方式以一样的, 这里调用 sleep() , 本质上调用的还是 inner()

相关推荐
伤心的梧桐叶1 小时前
Picset与创客贴比等待时间,没做完的任务不能从表里消失
python
没有气的汽水1 小时前
一次 SQS 消费者静默退出的排查:问题最后竟然出在日志里
python
用户450030140231 小时前
物业催缴系统为什么总在"冷却"这一步翻车:账期建模与规则命中的几个取舍
python
Web极客码2 小时前
决策模型 + LLM:用 Python 拆解浏览器自动化工作流
java·python·自动化
fanruitian2 小时前
python 装饰器 闭包
python
剑藏锋2 小时前
嵌入式学习(48)-大彩串口屏TFT指令解析
学习
泡茶喝茶写代码2 小时前
A股量化策略回测实战:从行情数据到绩效评估(第 13 篇):放量突破策略
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口
cxyxixiy2 小时前
数智码力:数据核对不用人工比对,Python 快速完成多表格差异校验
开发语言·python·学习
懒大王95272 小时前
学习TS + ArkTS 快速入门
学习
LMT流氓兔2 小时前
第五单元——第11课:自动测试“拒绝后绝不能写入”
数据库·人工智能·python·langchain