python中的装饰器

装饰器极大的简化了开发流程, 在不用更改代码的状况下对函数进行扩展, 下面是对装饰器的应用案例

基本使用

  • 定义装饰器如下
# 定义一个装饰器
def func(print_nums):

    def wrapper(*args, **kwargs):
        print('wrapp')
        return print_nums
    return wrapper
  • 装饰函数并打印
# 定义函数并用装饰器装饰
@func
def print_nums(num):
    a = num
    print(a)

# 执行打印被装饰函数名字(发现名字改变)
if __name__ == '__main__':
    print(print_nums.__name__)


# 打印结果为
wrapper

如何修改使被装饰函数函数名不发生变化
方式一

def func(print_nums):

    def wrapper(*args, **kwargs):
        print('wrapp')
        return print_nums
    wrapper.__name__ = print_nums.__name__ # 将函数名重新改回来
    return wrapper

方式二

# 方式二:使用functools.wrap()
import functools

def func(print_nums):
    @functools.wraps(print_nums)
    def wrapper(*args, **kwargs):
        print('wrapp')
        return print_nums
    return wrapper
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在stackoverflow上看到一篇讲python中decorator的回答,实在是受益匪浅,决定将其翻译成中文...
    大蟒传奇阅读 2,888评论 7 31
  • 1.概念:装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的应用有插入日志、增加计时逻辑来检测性...
    rtrhhthth阅读 417评论 0 0
  • 本文的内容主要参考了《Python进阶》一书 装饰器(Decorators)是什么? 我理解的装饰器,主要是设计模...
    韧心222阅读 577评论 0 0
  • 装饰器: 本质就是函数,为其他函数添加附加功能 装饰器原则: 不修改被装饰函数的源代码 不修改被装饰函数的调用方式...
    Techml阅读 363评论 1 1
  • 姓名:乐仁华 学号:16140220023 转载自: 【嵌牛导读】:本文主要是介绍python中装饰器的...
    小乐杂货铺阅读 437评论 0 0