前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 无固定参数装饰器

Python 无固定参数装饰器

作者头像
Wu_Candy
发布于 2022-07-04 12:33:36
发布于 2022-07-04 12:33:36
34100
代码可运行
举报
文章被收录于专栏:无量测试之道无量测试之道
运行总次数:0
代码可运行
这是无量测试之道的第182篇原创
装饰器是什么

Python 装饰器(fuctional decorators)是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。 这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌"原"函数的函数。

装饰器其实就是一个闭包函数,它是有两层的函数,它具有函数传参功能。

装饰器使用场景

当在多个地方出现雷同的代码块,且这些代码与核心业务没有直接关联的都可以用装饰器来代替,装饰器不仅能减少代码量,还使得代码逻辑更清晰、可读性更强,你只需专注于业务逻辑处理就行了。

装饰器调用顺序

装饰器是可以叠加使用的,那么使用装饰器以后代码是啥顺序呢? 对于Python 中的“@”语法糖,装饰器的调用顺序与使用“@”语法糖声明的顺序相反。

普通装饰器在Python 中运用

首先,我们来回顾一下普通的装饰器,这是一个用于计算函数执行的耗时装饰器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import time
def waste_time(func): 
    def function(*args,**kwargs):
        start_time=time.time()
        result=func(*args,**kwargs)
        end_time=time.time()
        spend=end_time-start_time
        print("函数%s 总共耗时%.3f秒:"%(func.__name__,spend))
        return result
    return function

带参数的装饰器只需要在原来那个不带参数的装饰器基础上之上在最外层套一个函数,该函数中定义一个参数,然后嵌套函数中引用该参数即可实现。

无固定参数装饰器在Python 中运用

再来,看看带参数的装饰器,这个装饰器可以通过传入参数的不同进行不同逻辑的处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def decorator_have_args(arg):
    def function_out(function):
        def function_in(*args,**kwargs):
            print("the log is:%s"%arg)
            print("call %s()"%function.__name__)
            print("args={}".format(*args))
            # print("kwargs={}".format(**kwargs))
            if(arg=="flag1"):
                function(*args,**kwargs)
            elif(arg=="flag2"):
                for i in range(3):
                    function(*args,**kwargs)
            else:
                print("pass")
        return function_in
    return function_out

@decorator_have_args("flag1")
def testa(a):
    print("this is testa funcion,a=%s"%a)

@decorator_have_args("flag2")
def testb(b):
    print("this is testb funcion,b=%s"%b)

@decorator_have_args("flagx")
def testc(c):
    print("this is testb funcion,b=%s"%c)

if __name__ == '__main__':
    testa("good")
    testb("better")
    testc("best")
总结

今天的分享是:Python 中如何使用无固定参数的装饰器,让代码结构和逻辑更加清晰,以及Python 的具体实现。小伙伴们可以参考以上代码片段,将代码运行起来将更有助于理解装饰器的执行原理。

end

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验