装饰器

本文详细介绍了Python装饰器的概念及其在函数功能增强上的应用。通过实例展示了如何使用装饰器实现函数计时,以及如何通过参数化装饰器控制额外功能的执行,如是否打印日志。此外,还探讨了装饰器处理不同数量和类型的参数的方法,以及如何利用嵌套装饰器带参数来灵活控制装饰器行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python中装饰器,可以在原有函数的功能上添加功能。

比如:

import time

def Abc():
    print("this is abc")
    time.sleep(1)

def Bcd():
    print("this is bcd")
    time.sleep(2)


def count_delay(s):

    def inner():
        start_time=time.time()
        s()
        end_time=time.time()
        print("花费了%s"%(start_time-end_time))

    return inner

Abc=count_delay(Abc)
Abc()

有两个函数Abc和Bcd分别功能是Abc输出“this is abc”然后停顿1秒,Bcd是输出“this is bcd”然后停顿2秒,通过一个修饰器,可以达到,最终使用Abc的时候,同时可以完成Abc计时这个功能。

 

这个写法 还有一个固定的方式就是

import time

def count_delay(s):

    def inner():
        start_time=time.time()
        s()
        end_time=time.time()
        print("花费了%s"%(start_time-end_time))

    return inner

@count_delay
def Abc():
    print("this is abc")
    time.sleep(1)

@count_delay
def Bcd():
    print("this is bcd")
    time.sleep(2)


Abc()

Bcd()

@就是装饰器提升一个函数功能的办法

 

 

当然,在这个时候的装饰器需要传入参数的话,可能会有这样那样的问题,可以把装饰器做成这样。

def count_delay(s):

    def inner(*x,**y):
        start_time=time.time()
        s(*x,**y)
        end_time=time.time()
        print("花费了%s"%(start_time-end_time))

    return inner

这个时候可以接收的函数传入的参数就更多样了。

 

 

装饰器还可以利用参数来表达是否进行某个操作比如刚刚这个。

import time

def is_logg(istrue):

    def count_delay(s):

        def inner(*x,**y):
            start_time=time.time()
            s(*x,**y)
            end_time=time.time()
            print("花费了%s"%(start_time-end_time))
            if istrue==True:
                print("这里可以执行istrue的内容")
        return inner
    return count_delay

@is_logg(True) #Abc=count_delay(Abc)
def Abc():
    print("this is abc")
    time.sleep(1)

@is_logg(False)
def Bcd():
    print("this is bcd")
    time.sleep(2)

 

这个时候嵌套的装饰器就带上了参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值