python装饰器使用

对multi使用装饰器时有参数,这时debug为1,所以调用multi时会输出函数调用相关信息。三、函数名字问题 当我们打印被装饰后的函数名字时,不知道大家有没发现输出的不是函数本身的名字,如下代码会输出‘wrap’而不是‘sum’:有时这种表现并不是我们想要的,我们希望被装饰后的函数名字还是函数本身,那要...
python装饰器使用
装饰器是从英文decorator翻译过来的,从字面上来看就是对某个东西进行修饰,增强被修饰物的功能,下面我们对装饰器做下简单介绍。
一、怎么编写装饰器
装饰器的实现很简单,本质是一个可调用对象,可以是函数、方法、对象等,它既可以装饰函数也可以装饰类和方法,为了简单说明问题,我们实现一个函数装饰器,如下代码:
有了这个装饰器,我们就可以打印出什么时候开始和结束调用函数,对于排查函数的调用链非常方便。
二、带参数的装饰器
上面的例子无论什么时候调用sum都会输出信息,如果我们需要按需输出信息怎么实现呢,这时就要用到带参数的装饰器了,如下代码:
对sum使用装饰器时没有参数,这时debug为0,所以调用sum时不会输出函数调用相关信息。
对multi使用装饰器时有参数,这时debug为1,所以调用multi时会输出函数调用相关信息。
三、函数名字问题
当我们打印被装饰后的函数名字时,不知道大家有没发现输出的不是函数本身的名字,如下代码会输出‘wrap’而不是‘sum’:
有时这种表现并不是我们想要的,我们希望被装饰后的函数名字还是函数本身,那要怎么实现呢?很简单,只需要引入functools.wraps即可,如下代码就会输出‘sum’了:
看完后是不是觉得python装饰器很简单,只要了解它的本质,怎么写都行,有好多种玩法呢。
2022-06-22
mengvlog 阅读 9 次 更新于 2025-07-19 13:28:20 我来答关注问题0
  •  翡希信息咨询 Python 中的 dataclass 装饰器详解

    在类定义前加上@dataclass装饰器即可。例如,定义一个包含x和y属性的Point类,dataclass装饰器会自动生成所需的方法。字段类型注解:dataclass支持字段类型注解,方便阅读代码,并为IDE提供类型提示。例如,可以给字段指定类型,如age: int和address: str。默认值与默认工厂函数:可以为字段设置默认值或使用...

  • 从上面的输出可以看出test_decorator() 函数被装饰以后元信息被wrapper() 函数取代了,可以使用@functools.wrap装饰器保留原函数的元信息:输出:装饰器可以接受自定义参数。比如定义一个参数来设置装饰器内部函数的执行次数:输出:Python 支持多个装饰器嵌套:装饰的过程:顺序从里到外:test_decorator('hel...

  • 对sum使用装饰器时没有参数,这时debug为0,所以调用sum时不会输出函数调用相关信息。对multi使用装饰器时有参数,这时debug为1,所以调用multi时会输出函数调用相关信息。三、函数名字问题 当我们打印被装饰后的函数名字时,不知道大家有没发现输出的不是函数本身的名字,如下代码会输出‘wrap’而不是‘su...

  • 在使用functools.wraps时,函数定义如下:functools.wraps()这为装饰器提供了一个方便的函数,用于在定义包装函数时调用update_wrapper(),等同于partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)。使用这个装饰器工厂时,原始example()函数的名称保持不变,其文档字符串得以保留。

  •  翡希信息咨询 Python中更加高效定义对象——dataclass装饰器

    Python中dataclass装饰器用于更加高效地定义对象,具体特点和用法如下:自动生成方法:使用dataclass装饰器可以自动为类生成__init__、__repr__、__eq__等方法,无需手动编写。实例变量与默认值:在类定义中指定实例变量,dataclass会根据这些变量生成初始化方法。可以通过为实例变量提供默认值或使用data...

檬味博客在线解答立即免费咨询

Python相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部