栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python装饰器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python装饰器

学习博客: Python 函数装饰器 | 菜鸟教程 (runoob.com)

直观上对装饰器的理解:

一切皆对象,函数可以作为参数传入另一个函数,函数也可作为返回值返回

装饰器能获取到添加装饰器的函数的函数名和参数,然后在装饰函数里可以调用被装饰的函数,也可以添加一些定制的代码

示例:
  • 用函数调用来达到装饰器的效果

    def decorate_add(f):
        def de_add(*args):
            print("求和函数即将执行!")
            f(args[0], args[1])
            print("求和函数执行完成!")
        return de_add
    
    
    def add_integer(a, b):
        sum = a + b
        print("求和结果:", sum)
    
    
    add_0 = decorate_add(add_integer)    # 函数名add_integer作为参数传入了decorate_add函数
    								  # decorate_add函数的返回值de_add是一个函数名
    add_0(2, 3)
    
    
    # 运行结果
    求和函数即将执行!
    求和结果: 5
    求和函数执行完成!
    
  • 使用装饰器来修改上个例子

    from functools import wraps
    
    
    def decorate_add(f):
        @wraps(f)        # @wraps保护被装饰的函数f的属性不被装饰器修改
        def de_add(*args):
            print("求和函数即将执行!")
            f(args[0], args[1])
            print("求和函数执行完成!")
        return de_add
    
    @decorate_add
    def add_integer(a, b):
        sum = a + b
        print("求和结果:", sum)
    
    
    add_integer(2, 3)
    
    
    # 运行结果
    求和函数即将执行!
    求和结果: 5
    求和函数执行完成!
    
  • 带参数的装饰器(函数调用)

    def decorate_add(c=5):
        def de_add_integer(func):
            def de_add(*args):
                print("求和函数即将执行!")
                func(args[0], args[1])
                print("求和函数执行完成!")
                print("额外的变量值为:", c)
            return de_add
        return de_add_integer
    
    
    def add_integer(a, b):
        sum = a + b
        print("求和结果:", sum)
    
    
    de_add0 = decorate_add()
    de_add1 = de_add0(add_integer)
    de_add1(2, 3)
    
    
    # 运行结果
    求和函数即将执行!
    求和结果: 5
    求和函数执行完成!
    额外的变量值为: 5
    
  • 带参数的装饰器(使用@)

    from functools import wraps
    
    
    def decorate_add(c=5):
        def de_add_integer(func):
            @wraps(func)
            def de_add(*args):
                print("求和函数即将执行!")
                func(args[0], args[1])
                print("求和函数执行完成!")
                print("额外的变量值为:", c)
            return de_add
        return de_add_integer
    
    
    @decorate_add(7)
    def add_integer(a, b):
        sum = a + b
        print("求和结果:", sum)
    
    
    add_integer(2, 3)
    
    
    # 输出结果
    求和函数即将执行!
    求和结果: 5
    求和函数执行完成!
    额外的变量值为: 7
    

拓展:

装饰器利用闭包原理,只是装饰器在闭包中传入的参数是函数

内容如有错误,敬请指正!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号