Python 基础 一文通关函数:从基础定义、文档规范到高级参数与 Lambda
前言在 Python 编程中函数是代码复用的基石。很多初学者虽然会写def但往往忽略了文档规范、作用域陷阱以及高阶参数的使用。本文将结合 Python 函数基础与进阶特性带你系统性地掌握函数编程的核心知识。第一部分夯实基础——函数的定义与规范1. 什么是函数函数是组织好的、可重复使用的、用来实现特定功能的代码段。作用提高代码的复用性减少重复代码提高开发效率。2. 基础语法与调用定义函数的标准格式如下def function_name(parameters): 函数说明文档 # 函数体 return value定义使用def关键字后跟函数名和圆括号。调用直接使用函数名(参数)即可执行。接收返回值result function_name(args)。3. 良好的编程习惯函数说明文档给函数添加说明文档Docstring能辅助理解函数的作用特别是在团队协作中非常重要。格式示例def add_num(x, y): 求和函数 :param x: 第一个数字 :param y: 第二个数字 :return: 两个数字的和 return x y 查看文档 print(add_num.doc)4. 变量的作用域易错点变量并不是在哪里都能用的这就涉及到了作用域。局部作用域函数内部定义的变量只能在函数内部使用。全局作用域函数外部定义的变量整个文件可用。global 关键字如果你想在函数内部修改全局变量必须使用global声明。num 100 # 全局变量 def test(): global num # 声明我要用全局的那个 num num 200 # 修改全局变量 print(num) test() print(num) # 输出 200因为被函数修改了5. 返回值与 None 类型return不仅结束函数还将结果返回给调用者。def add(a, b): 返回两个数的和 return a b def greet(name): 打印问候语无显式返回值 print(fHello, {name}!) # 没有 return 语句默认返回 None 调用示例 result1 add(3, 5) # result1 接收返回值 8 print(result1) # 输出: 8 result2 greet(Alice) # 打印: Hello, Alice! print(result2) # 输出: None函数没有 returnNone表示“空”或“无意义”。如果函数没有return默认返回None。None在if判断中相当于False。常用于变量初始化result None。第二部分函数进阶掌握了基础后我们需要让函数变得更灵活、更强大。6. 函数的嵌套使用在一个函数内部调用另一个函数。这是封装复杂逻辑的基础。def func_B(): print(我是 B 函数) def func_A(): print(我是 A 函数) func_B() # A 里面调用了 B func_A()7. 四种参数传递方式核心重点7.1 位置参数最基础的传参方式。顺序必须一致个数必须匹配。def user_info(name, age): print(f姓名: {name}, 年龄: {age}) user_info(Tom, 20) # 正确7.2 关键字参数通过keyvalue形式传递。作用消除参数顺序限制提高代码可读性。注意如果混用位置参数必须在关键字参数前面。user_info(age20, nameTom) # 正确顺序无所谓混用示例正面示例正确混用def user_info(name, age, city): print(f姓名: {name}, 年龄: {age}, 城市: {city}) 正确位置参数在前关键字参数在后 user_info(Tom, city北京, age20) # 输出姓名: Tom, 年龄: 20, 城市: 北京反面示例错误混用# 错误关键字参数在位置参数前面 user_info(nameTom, 北京, age20) # 会报错SyntaxError: positional argument follows keyword argument记住这个简单规则先位置后关键字。一旦开始使用关键字参数后面的所有参数都必须使用关键字形式。7.3 缺省参数默认参数定义函数时给参数一个默认值。调用时如果不传该参数就使用默认值。规则所有位置参数必须出现在缺省参数前面。def print_info(name, gender男): print(f{name} 的性别是 {gender}) print_info(小明) # 输出小明 的性别是 男 print_info(小红, 女) # 输出小红 的性别是 女7.4 不定长参数*args 与 **kwargs当你不确定调用者会传入多少个参数时使用不定长参数。*args接收所有位置参数打包成一个元组 (tuple)。**kwargs接收所有关键字参数打包成一个字典 (dict)。*args 单独使用示例*args用于接收任意数量的位置参数def sum_all(*args): 计算所有传入数字的和 total 0 for num in args: total num return total 调用示例 print(sum_all(1, 2, 3)) # 输出6 print(sum_all(10, 20, 30, 40)) # 输出100 print(sum_all(5)) # 输出5 print(sum_all()) # 输出0没有参数时args 是空元组**kwargs 单独使用示例**kwargs用于接收任意数量的关键字参数def print_user_info(**kwargs): 打印用户信息 for key, value in kwargs.items(): print(f{key}: {value}) 调用示例 print_user_info(name张三, age25, city北京) 输出 name: 张三 age: 25 city: 北京 print_user_info(title工程师, department研发部) 输出 title: 工程师 department: 研发部 print_user_info() # 没有参数时kwargs 是空字典*args 和 **kwargs 混合使用示例两者可以同时使用但必须遵循顺序*args在前**kwargs在后def demo(*args, **kwargs): print(f位置参数打包: {args}) # 输出元组 print(f关键字参数打包: {kwargs}) # 输出字典 demo(1, 2, 3, nameJack, age18) 输出 位置参数打包: (1, 2, 3) 关键字参数打包: {name: Jack, age: 18} demo(a, b, x100, y200) 输出 位置参数打包: (a, b) 关键字参数打包: {x: 100, y: 200}重要规则*args必须放在所有普通位置参数之后**kwargs必须放在所有参数包括*args之后正确的参数顺序普通参数 →*args→**kwargs8. 匿名函数 LambdaLambda 是一种极简的函数定义方式适用于逻辑简单、只需使用一次的场景。语法lambda 参数: 表达式特点只能包含一个表达式不能包含复杂的语句块表达式的计算结果就是返回值。# 普通函数 def add(a, b): return a b Lambda 写法 sum_func lambda a, b: a b print(sum_func(10, 20)) # 输出 30应用场景常作为参数传递给其他高阶函数如sort,map,filter。students [(Alice, 88), (Bob, 95), (Charlie, 70)] # 按成绩排序取元组第二个元素 students.sort(keylambda x: x[1]) print(students)总结从基础的def定义、作用域控制到进阶的*args/**kwargs灵活传参再到优雅的lambda表达式掌握这些内容你的 Python 代码将更加简洁、专业且易于维护。建议动手敲一遍代码体会不同参数传递方式的区别

相关新闻

查看Windows当前应用的组策略

查看Windows当前应用的组策略

如果你希望在电脑上查看所有有效的组策略设置,以下是操作方法。 什么是Windows中的组策略 在Windows世界中,组策略为网络管理员提供了一种将特定设置分配给用户组或计算机组的方法。然后,无论何时组中的用户登录到联网的PC,或无论何时启动组中的PC,都会应用这些设置。 …

2026/10/13 6:05:24 阅读更多 →
Airoha 157x SDK构建失败排查:从CMake配置错误到项目成功编译

Airoha 157x SDK构建失败排查:从CMake配置错误到项目成功编译

1. 项目构建失败的根源:从“找不到CMake配置”说起最近在折腾Airoha 157x的SDK,准备编译个简单的Demo程序,结果上来就给我当头一棒。命令行里赫然躺着一行刺眼的错误::-1: error: cmake project configuration failed. no cmake c…

2026/10/10 23:36:47 阅读更多 →
PID学习之路

PID学习之路

7月29号 跟着江协科技的课 学完了1-3 基础代码的的编写 并且学习使用了 SerialPlot软件 第一次看见可视化的信号波形感觉挺牛逼的 旋转编码器的配置思路 可以看到RP1-4的输出引脚接到了最小系统板上的A2-5引脚 斜体样式 再查找对应的引脚复用图表可发现PA2-5 对应的是ADC1或者A…

2026/10/12 21:21:43 阅读更多 →

最新新闻

Small Agent为何要从生成式推理转向分类式推理

Small Agent为何要从生成式推理转向分类式推理

1. 为什么“生成式推理”正在拖慢 Small Agent 的实际落地?你有没有遇到过这样的场景:一个轻量级的智能体(Small Agent),部署在边缘设备上,响应延迟要求低于200毫秒,但每次执行“判断用户意图”…

2026/10/14 5:15:02 阅读更多 →
工业相机接口对比:GigE、USB3、CameraLink、CoaXPress 怎么选

工业相机接口对比:GigE、USB3、CameraLink、CoaXPress 怎么选

昨天聊完黑白还是彩色,结尾说下一步该盯接口和带宽。先补一句:彩色相机要是在机内直接转成 RGB 再往外送,数据量比原始 Bayer 一下翻三倍。这事在现场可不是纸上谈兵。 去年调一台四工位的外观机,四台 500 万黑白相机,…

2026/10/14 5:15:02 阅读更多 →
电热综合能源系统优化调度模型与Matlab实现

电热综合能源系统优化调度模型与Matlab实现

1. 项目背景与核心价值去年参与某工业园区综合能源系统规划时,我们遇到一个棘手问题:园区光伏发电在午间经常出现大量弃光,而晚高峰又不得不启动昂贵的燃气锅炉供热。这种供需时空错配导致全年能源成本增加12%。这正是电热综合能源系统优化调…

2026/10/14 5:15:02 阅读更多 →
InsightFace gaze 模块视线估计完整指南:一次 160×160 推理输出 3D 视线向量

InsightFace gaze 模块视线估计完整指南:一次 160×160 推理输出 3D 视线向量

InsightFace gaze 模块视线估计完整指南:一次 160160 推理输出 3D 视线向量 【免费下载链接】insightface State-of-the-art 2D and 3D Face Analysis Project 项目地址: https://gitcode.com/GitHub_Trending/in/insightface InsightFace 是一个 2D/3D 人脸…

2026/10/14 5:15:02 阅读更多 →
工程机械现场缺的不是打卡 App,是机手经营链

工程机械现场缺的不是打卡 App,是机手经营链

01|为什么要做这个产品工程机械现场,数字化并不少。项目部有智慧工地,覆盖视频监控、人员实名、验收大屏; 设备侧搭载物联网盒子,可以采集台班、油耗、运行轨迹; 团队协作大多在用钉钉、企业微信。但机队老…

2026/10/14 5:15:02 阅读更多 →
AI工程师必修课:标量、向量、矩阵、张量的工程本质

AI工程师必修课:标量、向量、矩阵、张量的工程本质

1. 这不是数学课,是AI工程师的“肌肉记忆”训练你打开任何一本深度学习框架的官方文档,不到三分钟就会撞上这几个词:标量、向量、矩阵、张量。它们不像“卷积”“反向传播”那样自带技术光环,也不像“Transformer”“LoRA”那样刷…

2026/10/14 5:14:02 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →