Python 函数全解:从基础函数到装饰器实战
前言函数是 Python 代码封装、复用最核心的工具。不管是小型管理系统还是大型项目都会大量使用函数。本篇文章循序渐进从函数基础定义、参数体系、变量作用域再到匿名函数、递归、闭包、装饰器完整梳理搭配可运行代码案例适合零基础巩固与面试复习。目录前言1. 函数基础1.1 什么是函数1.2 函数的定义与调用1.3 函数的返回值2. 函数参数详解2.1 位置参数2.2 默认参数2.3 关键字参数2.4 可变参数*args 不定长位置参数**kwargs 不定长关键字参数2.5 参数解包3. 变量作用域3.1 局部变量与全局变量3.2 global 与 nonlocal3.3 globals () 与 locals ()4. 高级函数4.1 匿名函数 lambda4.2 高阶函数4.3 递归函数5. 闭包与装饰器5.1 闭包5.2 装饰器5.3 装饰器常用案例总结1. 函数基础1.1 什么是函数函数就是封装一段具备独立功能的代码块给代码命名实现一次定义、多次调用。 作用代码复用避免大量重复代码简化结构提高可读性方便维护修改只需改动函数内部1.2 函数的定义与调用语法python运行# 定义函数 def 函数名(参数): 函数体代码 # 调用函数 函数名()示例python运行def greet(): print(Hello Python函数) # 调用 greet()1.3 函数的返回值return用来把函数内部的数据传递到函数外部没有写 return默认返回Nonereturn 执行后函数立刻终止后面代码不再运行可以返回单个值、多个值自动封装为元组python运行def add(a, b): return a b res add(3,5) print(res)2. 函数参数详解2.1 位置参数调用函数时实参按照顺序依次匹配形参顺序不能乱。python运行def user_info(name,phone): print(name,phone) # 顺序一一对应 user_info(张三,13800138000)2.2 默认参数定义形参时直接赋值如果调用不传参自动使用默认值。 ⚠️ 注意默认参数不要使用可变对象列表、字典python运行def show_msg(text默认文本): print(text) show_msg() show_msg(自定义内容)2.3 关键字参数调用时通过形参名值传参可以不遵循定义顺序。python运行def user_info(name,phone): print(name,phone) # 关键字传参顺序随意 user_info(phone13900139000, name李四)规则位置参数必须放在关键字参数前面2.4 可变参数*args 不定长位置参数收集所有多余位置参数打包成元组 tuplepython运行def func(*args): print(args) func(1,2,3,4) # args (1,2,3,4)**kwargs 不定长关键字参数收集所有多余关键字参数打包成字典 dictpython运行def func(**kwargs): print(kwargs) func(name王五,age20) # kwargs {name:王五,age:20}通用模板def func(a, b10, *args, **kwargs):2.5 参数解包*解包序列 (列表 / 元组)**解包字典把容器内元素拆分传入函数python运行def calc(a,b,c): print(abc) nums [10,20,30] calc(*nums) #等价calc(10,20,30) data {a:1,b:2,c:3} calc(**data) #等价calc(a1,b2,c3)3. 变量作用域3.1 局部变量与全局变量全局变量函数外部定义整个文件都能访问局部变量函数内部定义仅函数内有效外部无法访问python运行num 100 #全局变量 def test(): x 20 #局部变量 print(num) #内部可读全局变量 test() # print(x) 报错外部不能访问局部变量3.2 global 与 nonlocalglobal在函数内部声明变量为全局变量修改全局变量python运行count 0 def add_count(): global count count 1nonlocal嵌套函数中声明使用外层函数的局部变量不是全局python运行def outer(): n 10 def inner(): nonlocal n n 5 print(n) inner() outer()3.3 globals () 与 locals ()globals()返回当前全部全局命名空间字典locals()返回当前作用域局部命名空间字典python运行a 10 print(globals()) def demo(): b 20 print(locals()) demo()4. 高级函数4.1 匿名函数 lambdalambda快速创建简单单行函数不需要 def 命名 语法lambda 参数: 返回表达式python运行#普通函数 def add(x,y): return xy #等价lambda f lambda x,y:xy print(f(2,3))经常搭配 sorted ()、map ()、filter () 使用。4.2 高阶函数满足条件参数是函数 或者 返回值是函数python运行def calc(func, a, b): return func(a,b) res calc(lambda x,y:x*y,4,5) print(res)常见内置高阶函数map、filter、sorted、reduce4.3 递归函数函数自己调用自己必须设置终止条件否则无限递归报错。 结构递归表达式 基线条件退出条件python运行# 计算阶乘 n! 1*2*3...*n def factorial(n): if n 1: return 1 return n * factorial(n-1) print(factorial(5))注意Python 存在默认递归深度限制不适合超大层数递归。5. 闭包与装饰器5.1 闭包闭包条件嵌套函数内层函数使用外层函数变量外层函数返回内层函数 优点保存外层函数变量状态python运行def outer(msg): def inner(): print(f消息{msg}) return inner f outer(快递管理系统) f()5.2 装饰器装饰器本质特殊闭包作用不修改原函数代码、不修改原函数调用方式给函数新增功能。 通用模板python运行def decorator(func): def wrapper(*args, **kwargs): #执行函数前拓展逻辑 print(函数执行前) res func(*args, **kwargs) #执行函数后拓展逻辑 print(函数执行后) return res return wrapper #语法糖 装饰器名 decorator def hello(): print(执行hello函数) hello()5.3 装饰器常用案例计时器装饰器统计函数运行耗时日志记录装饰器权限校验装饰器 计时器示例python运行import time def timer(func): def wrap(*args,**kwargs): start time.time() result func(*args,**kwargs) end time.time() print(f函数耗时{end-start:.4f}秒) return result return wrap timer def test(): time.sleep(1) test()总结def 定义函数return 返回数据参数分为位置、默认、关键字、*args、**kwargs掌握参数解包global 操作全局变量nonlocal 操作外层嵌套变量lambda 快速实现简易函数递归注意终止条件闭包保存上下文装饰器基于闭包实现无侵入扩展功能。

相关新闻

如何在5分钟内掌握Blender VRM插件:从零开始的完整指南

如何在5分钟内掌握Blender VRM插件:从零开始的完整指南

如何在5分钟内掌握Blender VRM插件:从零开始的完整指南 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.2 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender VRM-Addon-for-Blender…

2026/10/13 22:01:49 阅读更多 →
svmjs实战教程:用JavaScript实现异或问题分类,掌握SVM训练技巧

svmjs实战教程:用JavaScript实现异或问题分类,掌握SVM训练技巧

svmjs实战教程:用JavaScript实现异或问题分类,掌握SVM训练技巧 【免费下载链接】svmjs Support Vector Machine in Javascript (SMO algorithm, supports arbitrary kernels) GUI demo 项目地址: https://gitcode.com/gh_mirrors/sv/svmjs svmjs…

2026/9/28 22:48:45 阅读更多 →
enumerate 的用法

enumerate 的用法

enumerate 的用法 enumerate 是 Python 内置函数,作用是在遍历可迭代对象时,同时获取索引和值。 基本语法enumerate(iterable, start0) 返回 (index, value) 元组,start 指定起始索引(默认 0)。简单示例words ["…

2026/10/9 9:36:01 阅读更多 →

最新新闻

基于SpringBoot的北京民宿推荐系统:内容算法与首都特色实践

基于SpringBoot的北京民宿推荐系统:内容算法与首都特色实践

1. 内容整体设计与思路拆解1.1 为什么是民宿推荐系统,而不是酒店预订系统先说个现象。很多人在做毕业设计时,一提到旅游住宿类系统,第一反应就是"酒店管理系统""民宿预订平台",但这类题目在答辩时很容易被打低…

2026/10/13 22:01:45 阅读更多 →
大模型应用落地实战指南:从选型到系统集成的全链路解析

大模型应用落地实战指南:从选型到系统集成的全链路解析

1. 项目概述:一张动态演进的“大模型生态地图”到底该怎么画?“国内外知名大模型及应用——模型/应用维度(2026/10/08)”这个标题,表面看是一份静态快照,实则暗含三重张力:时间戳“2026/10/08”…

2026/10/13 22:01:45 阅读更多 →
MFC界面美化完整案例:自绘控件、去标题栏与自适应布局

MFC界面美化完整案例:自绘控件、去标题栏与自适应布局

简介:这是一套面向Windows桌面开发者的MFC界面美化完整工程案例,可直接用VS2022打开运行,解决原生菜单栏、标题栏、按钮及列表控件外观老旧、贴图与自适应设计困难的问题。工程去除了MFC自带菜单和系统标题栏相关元素,对顶部区域自…

2026/10/13 22:01:45 阅读更多 →
cangaroo USB-CAN上位机源码:编译、调试与二次开发指南

cangaroo USB-CAN上位机源码:编译、调试与二次开发指南

简介:这是一份Cangaroo USB-CAN上位机完整源码,采用Qt图形界面框架开发,面向需要进行CAN总线数据监控、报文分析与设备调试的软硬件工程师。压缩包共包含两百一十四份文件,其中C和C语言的头文件与实现文件占主要比例,还…

2026/10/13 22:01:45 阅读更多 →
烂番茄影评情感分类实战:Python实现从TF-IDF到BiLSTM

烂番茄影评情感分类实战:Python实现从TF-IDF到BiLSTM

简介:基于Python实现对烂番茄电影评论情感分类的完整实践项目,来源于华中科技大学大数据与人工智能课程大作业。项目包含源码、实验报告与数据集,覆盖评论获取、文本预处理、情感特征提取、模型训练与评估等环节,适合计算机、人工…

2026/10/13 22:01:45 阅读更多 →
开源AI工具实战:让大模型从聊天到本地自动化干活

开源AI工具实战:让大模型从聊天到本地自动化干活

1. 从聊天到干活:这个开源AI工具到底在解决什么问题大多数人第一次接触AI,都是通过对话框。你问一句,它答一句,聊得挺热闹,但聊完之后呢?该手动复制的还得手动复制,该自己打开软件操作的还得自己…

2026/10/13 22:00:44 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →