news 2026/2/13 20:39:29

Python 开发 - Python 装饰器(装饰器概述、函数概念、装饰器手动实现、装饰器语法糖实现)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 开发 - Python 装饰器(装饰器概述、函数概念、装饰器手动实现、装饰器语法糖实现)

一、装饰器概述

  1. 装饰器允许开发者在不修改原函数代码的情况下,给函数添加额外的功能

  2. 装饰器本质上是一个返回函数的高阶函数

  3. 在 Python 中,使用装饰器语法糖@可以便捷应用装饰器


二、函数概念

1、函数是一等对象
  1. 函数可以赋值给变量
defgreet(name):returnf"Hello,{name}"my_func=greetprint(my_func("Alice"))
# 输出结果 Hello, Alice
  1. 函数可以作为参数传递
defgreet(name):print(f"Hello,{name}")defcall_twice(func,arg):greet(arg)greet(arg)call_twice(greet,"Alice")
# 输出结果 Hello, Alice Hello, Alice
  1. 可以定义在另一个函数内部
defcall_twice(arg):defgreet(name):returnf"Hello,{name}"print(greet(arg)+" "+greet(arg))call_twice("Alice")
# 输出结果 Hello, Alice Hello, Alice
  1. 函数可以作为返回值
defget_func(flag):defadd(num1,num2):returnnum1+num2defsubtract(num1,num2):returnnum1-num2ifflag=="+":returnaddelifflag=="-":returnsubtract result_func=get_func("+")result=result_func(10,20)print(result)
# 输出结果 30
2、闭包
  • 闭包是嵌套函数中,内部函数引用外部函数的变量,即使外部函数已经执行完毕

  • 如下例,函数 inner_func 引用了外部函数的变量 x,即使函数 outer_func 已经执行完,函数 closure 仍能访问 x

defouter_func(x):definner_func(y):returnx+yreturninner_func closure=outer_func(10)result=closure(5)print(result)
# 输出结果 15

三、装饰器手动实现

  1. 基本实现
# 装饰器函数defmy_decorator(func):defwrapper():print("函数执行前")result=func()print("函数执行后")returnresultreturnwrapper# 原始函数defsay_hello():print("Hello")# 应用装饰器decorated_say_hello=my_decorator(say_hello)decorated_say_hello()
# 输出结果 函数执行前 Hello 函数执行后
  1. 函数带参数
# 装饰器函数defmy_decorator(func):defwrapper(**kwargs):print("函数执行前")result=func(**kwargs)print("函数执行后")returnresultreturnwrapper# 原始函数defsay_hello(name):print(f"Hello,{name}")# 应用装饰器decorated_say_hello=my_decorator(say_hello)decorated_say_hello(name="Alice")
# 输出结果 函数执行前 Hello, Alice 函数执行后
  1. 装饰器带参数
# 装饰器函数defmy_decorator(func,times):defwrapper():print("函数执行前")foriinrange(times):func()print("函数执行后")returnwrapper# 原始函数defsay_hello():print("Hello World")# 应用装饰器decorated_say_hello=my_decorator(say_hello,3)decorated_say_hello()
# 输出结果 函数执行前 Hello World Hello World Hello World 函数执行后

四、装饰器语法糖实现

  1. 基本实现
# 装饰器函数defmy_decorator(func):defwrapper():print("函数执行前")result=func()print("函数执行后")returnresultreturnwrapper# 应用装饰器@my_decoratordefsay_hello():print("Hello")say_hello()
# 输出结果 函数执行前 Hello 函数执行后
  1. 函数带参数
# 装饰器函数defmy_decorator(func):defwrapper(**kwargs):print("函数执行前")result=func(**kwargs)print("函数执行后")returnresultreturnwrapper# 应用装饰器@my_decoratordefsay_hello(name):print(f"Hello,{name}")say_hello(name="Alice")
# 输出结果 函数执行前 Hello, Alice 函数执行后
  1. 装饰器带参数
# 装饰器函数defmy_decorator(times):defdecorator(func):defwrapper():print("函数执行前")foriinrange(times):func()print("函数执行后")returnwrapperreturndecorator# 应用装饰器@my_decorator(times=3)defsay_hello():print("Hello World")say_hello()
# 输出结果 函数执行前 Hello World Hello World Hello World 函数执行后
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/9 17:08:49

太阳能电池串IV检测系统:精准契合行业标准,筑牢光伏质量防线

在全球光伏产业向高质量发展转型的关键阶段,行业标准体系持续完善,对光伏核心部件的检测精度、规范性提出了更高要求。太阳能电池串作为光伏组件的核心功率单元,其IV特性(电流-电压特性)直接决定组件发电效能与安全稳定…

作者头像 李华
网站建设 2026/2/11 2:31:33

64、Ubuntu 下 C/C++ 编程与 Mono 开发全解析

Ubuntu 下 C/C++ 编程与 Mono 开发全解析 1. C 与 C++ 基础 Linux 内核大多用 C 语言编写,这使得 Linux 能适配众多不同的 CPU。C++ 是 C 语言的面向对象扩展,C++ 编译器能正确编译 C 程序,且可以在 C++ 中编写非面向对象代码,但 C 编译器无法编译 C++ 代码。C++ 通过提供…

作者头像 李华
网站建设 2026/2/13 5:22:55

5、Ubuntu系统网络与图形界面使用指南

Ubuntu系统网络与图形界面使用指南 1. 无线网络配置 在过去,为Linux系统配置无线网络是一项艰巨的任务,需要许多复杂的步骤才能连接到无线网络。但现在情况已大为改观,Ubuntu系统包含了一个名为Network Manager的实用工具,它让连接和管理无线网络变得极其简单。 当你登录…

作者头像 李华
网站建设 2026/2/6 11:49:22

快速构建MCP工具的开发包FastMCP

FastMCP是一个用于快速构建MCP(Model Context Protocol)服务器的Python框架,它能帮你轻松地将自定义工具和数据源接入大型语言模型(LLM)。你的核心需求是查询天气和热点新闻,这正是FastMCP的典型应用场景。…

作者头像 李华
网站建设 2026/2/13 0:30:22

推荐字节的文档图像解析工具Dolphin

字节跳动开源的Dolphin,是一个基于多模态大语言模型的高级文档图像解析工具。和传统OCR(仅识别文字)不同,它能够深度理解文档的版面,并将图文、表格、公式等复杂元素一并转化为结构化数据。📄 核心原理&…

作者头像 李华
网站建设 2026/2/13 15:21:36

查 Intel CPU 信息不用绕弯!这个专属查询工具,精准直达官网详情~

不管是装机选配件、升级电脑硬件,还是想了解自己设备的 CPU 性能参数,查询 Intel CPU 的详细信息都是必经步骤。但 Intel 官网页面复杂,搜索入口隐蔽,想要快速找到目标型号的核心参数、功耗、兼容性等信息并不容易,往往…

作者头像 李华