python装饰器

server/2025/2/14 6:11:28/

前言

修饰器是 Python 语言的标准特性,可以使用不同的方式修改函数的行为。惯常用法是使用修饰器把函数注册为事件的处理程序。

装饰器的作用

在不改变原有函数的源代码的情况下,给原有函数增加新的功能。

装饰器的功能特点

  • 不修改原有函数的源代码
  • 给原有函数增加新的功能
  • 装饰器符合了开发中的封闭开放原则

装饰器示例代码

示例1

首先声明一个装饰器函数

python">def decorated_by(func):func.__doc__ += '\nDecorated by decorated_by'return func

函数decorated_by接受一个函数func作为参数,在decorated_by函数中给func函数的docstring附加一个字符串,再返回func。这就相当于没有修改func函数的源代码,却修改了其功能。
然后我们定义一个被装饰的函数

python">def add(x, y):"""return the sum of x and y"""return x + y

被两个"""包住的return the sum of x and y就是函数add的docstring。
然后使用装饰器函数decorated_by装饰函数add。
有两种写法

  • 写法1
python">add = decorated_by(add)

add就相当于decorated_by定义中的func。

  • 写法2
    在函数add定义的上一行添加@decorated_by,如下所示
python">@decorated_by
def add(x, y):"""return the sum of x and y"""return x + y

然后我们使用help函数查看add的docstring是否被附加了指定字符串(“\nDecorated by decorated_by”)。

python">help(add)

输出为

Help on function add in module __main__:add(x, y)return the sum of x and yDecorated by decorated_by

可以看到,附加字符串成功,说明装饰器生效了。

示例2


http://www.ppmy.cn/server/42888.html

相关文章

开发需要知道的敏捷开发理念

敏捷宣言和原则 敏捷软件开发宣言 敏捷软件开发宣言(Agile Manifesto)是敏捷开发方法的核心指导原则,由17位软件开发专家在2001年共同起草。该宣言强调了在软件开发过程中对某些价值观的优先级: 个体和互动高于流程和工具&#…

前端开发技巧 --判断文本是否溢出

const isTextOverflower()>{if(element){return element.offsetWidth > element.scrollWidth}return false}实现javascript 判断文本是否溢出

WAF绕过(下)

过流量检测 这里的流量检测就是在网络层的waf拦截到我们向webshell传输的数据包,以及webshell返回的数据 包,检测其中是否包含敏感信息的一种检测方式。如果是大马的情况下,可以在大马中添加多处判断代码,因此在执行大马提供的功…

微信小程序多端应用Donut Android生成签名

一、生成签名的作用 确保应用的完整性:签名可以确保应用在发布后没有被修改。如果应用被修改,签名就会改变,Android系统就会拒绝安装。确定应用的唯一身份:签名是应用的唯一标识,Android系统通过签名来区分不同的应用…

memmove使⽤和模拟实现

一:memmove的使⽤ 这是memmove在库里的定义,具体可在cplusplus.com查看 void * memmove ( void * destination, const void * source, size_t num ) • 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。 • 如果源空间和⽬标…

C# 中的 Dictionary<TKey, TValue> 类

Dictionary<TKey, TValue> 是 C# 中的一个泛型集合类,它提供了一种键值对的存储结构,可以用来存储和快速访问数据。它的主要特点如下: 键值对结构: Dictionary 中的每个元素都是一个键值对,键必须是唯一的,值可以重复。 快速访问: Dictionary 基于哈希表实现,可以提供 O…

Hive的小文件处理

针对ORC存储格式的小文件 --orc合并小文件的特定语法,使用concatenate(连接、使连续)关键字 --非分区表 alter table table_name concatenate;--分区表 alter table table_name partition(dtxxx) concatenate;针对TEXTFILE存储格式的小文件 --将这些小文件进行合并,这里使用d…

Python异常处理:打造你的代码防弹衣!

Hi&#xff0c;我是阿佑&#xff0c;上文咱们讲到——揭秘Python的魔法&#xff1a;装饰器的超能力大揭秘 ‍♂️✨&#xff0c;阿佑将带领大家通过精准捕获异常、使用with语句和上下文管理器、以及异常链等高级技巧来增强代码的健壮性。就像为代码穿上防弹衣&#xff0c;保护它…