跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 核心语法:函数定义与使用详解

综述由AI生成Python 函数是可重复调用的代码块,掌握其定义、参数传递及作用域规则至关重要。详细解析了默认参数的可变对象陷阱、LEGB 作用域查找机制以及 lambda 匿名函数在排序和过滤中的应用。同时对比了递归与循环的性能差异,强调递归需设置基线条件以防栈溢出。通过实例演示了阶乘计算及闭包原理,帮助开发者编写更安全高效的代码。

魔尊发布于 2026/3/25更新于 2026/6/1320 浏览
Python 核心语法:函数定义与使用详解

函数基础

函数是可重复调用的代码块,用来封装特定功能。在 Python 中,它是构建模块化程序的核心单元。

基本语法结构

def 函数名 (参数 1, 参数 2, ...):
    """函数文档字符串(可选,说明函数功能)"""
    # 函数体:实现功能的代码
    执行语句
    return 返回值 # 可选,没有则默认返回 None

关键注意事项

在实际开发中,有几个坑需要特别注意:

  1. 默认参数陷阱:避免使用列表或字典等可变对象作为默认值。如果必须用,建议初始化为 None,在函数内部再初始化(例如 lst = [] if lst is None else lst),防止多次调用共享同一对象。
  2. 参数顺序:遵循必选参数 → 默认参数 → *args → **kwargs 的顺序,违反会直接报错。
  3. 可变对象传参:函数内修改传入的可变对象会影响外部变量。若需隔离影响,可传递副本(如 lst.copy())。
  4. 作用域声明:修改全局变量需加 global,修改嵌套变量需加 nonlocal。未声明直接赋值会被识别为局部变量。
  5. 返回值细节:无 return 的函数默认返回 None;多返回值本质是元组,解包时数量必须匹配。
  6. 递归深度:递归必须有明确的终止条件,且深度通常限制在 1000 层左右,否则触发 RecursionError。

参数传递与返回值

参数方式对比

参数类型特点适用场景核心限制
位置参数固定数量,顺序严格参数明确且少少传或多传都会报错
默认参数有常用默认值参数有默认选项必须在位置参数后定义,避免可变对象
关键字参数调用时可打乱顺序参数多,怕记混需在位置参数之后
*args接收任意数量位置参数不确定参数个数需在默认参数后、**kwargs 前
**kwargs
接收任意数量关键字参数
不确定关键字参数个数
必须在参数列表最后
解包传参将容器快速转为参数已有列表/字典需传参解包后数量/名称需匹配定义

返回值形式

返回值形式核心特点关键注意事项
无返回值无 return,默认 None仅用于执行操作,勿误判有返回值
单个返回值单一值,类型不限类型需与调用处预期匹配
多个返回值本质返回元组,可解包解包变量数必须匹配
返回容器列表/字典存储多值空容器需考虑调用处的处理逻辑

变量作用域与查找规则

变量作用域决定了变量在程序中可被访问和修改的范围。Python 遵循 LEGB 规则进行查找:

  • L (Local):当前函数或代码块的局部作用域。
  • E (Enclosing):嵌套外层函数的非局部作用域。
  • G (Global):全局作用域。
  • B (Built-in):Python 内置变量或函数。

具体分类如下:

  1. 全局作用域:所有函数外部定义的变量。整个程序运行期间存在,可被读取,但直接修改需用 global 声明。
  2. 局部作用域:函数内部定义的变量。仅在函数内可用,执行结束后销毁。
  3. 非局部作用域:嵌套函数中外层函数的变量。内层函数可读取,修改需用 nonlocal 声明。

匿名函数 (lambda)

匿名函数是临时、简化的函数,无名称,仅适用于一行简单逻辑。

语法

lambda 参数 1, 参数 2, ...: 表达式

常见用法

配合 sorted 自定义排序

指定排序依据,比如按元组或字典的某个值排序。

data = [(1, 5), (4, 8), (6, 9), (1, 7)]
print(sorted(data, key=lambda x: x[1]))
# 输出:[(1, 5), (1, 7), (4, 8), (6, 9)]
配合 map 批量处理

对序列中每个元素执行同一简单操作。

students = [{"name": "张三", "age": 18}, {"name": "李四", "age": 16}]
print(list(map(lambda x: x["age"], students)))
# 输出:[18, 16]
配合 filter 过滤元素

按条件筛选序列中的元素(保留返回 True 的元素)。

num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(filter(lambda x: x % 2 == 1, num)))
# 输出:[1, 3, 5, 7, 9]

嵌套函数与闭包

在一个函数内部定义另一个函数称为嵌套函数。这不仅仅是语法糖,更有实际用途:

  1. 封装私有逻辑:辅助函数仅在主函数内使用,避免污染全局命名空间。
  2. 实现闭包:保留外部函数的变量状态,即使外部函数执行完毕。
  3. 减少参数传递:内部函数可直接使用外部函数的变量,无需重复传参。

递归与循环对比

递归函数是在函数体内调用自身的函数。它必须满足两个条件:基线条件(何时停止)和递归条件(如何调用)。

维度递归循环
代码风格简洁、逻辑直观稍繁琐,需手动控制变量
性能有函数调用开销,速度稍慢无额外开销,速度更快
内存占用占用栈内存,深度有限制内存稳定,无深度限制
易错点遗漏基线条件导致无限递归遗漏终止条件导致死循环
适用场景逻辑简单、追求代码简洁数据量大、追求速度/低内存

示例:阶乘计算

n = int(input("请输入 n 的值:"))
if n < 0:
    print("错误:负数没有阶乘!")
else:
    def Factorial(m):
        if m == 0 or m == 1:
            return 1
        else:
            return m * Factorial(m - 1)
    
    print(f"{n}的阶乘为{Factorial(n)}")

注意递归深度限制,对于大数值计算,迭代(循环)通常是更稳妥的选择。

目录

  1. 函数基础
  2. 基本语法结构
  3. 关键注意事项
  4. 参数传递与返回值
  5. 参数方式对比
  6. 返回值形式
  7. 变量作用域与查找规则
  8. 匿名函数 (lambda)
  9. 语法
  10. 常见用法
  11. 配合 sorted 自定义排序
  12. 输出:[(1, 5), (1, 7), (4, 8), (6, 9)]
  13. 配合 map 批量处理
  14. 输出:[18, 16]
  15. 配合 filter 过滤元素
  16. 输出:[1, 3, 5, 7, 9]
  17. 嵌套函数与闭包
  18. 递归与循环对比
  19. 示例:阶乘计算
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 异步爬虫结合 K8S 弹性伸缩构建高并发采集引擎
  • Python 字典内部实现原理详解
  • Python 与 C 语言对比:如何选择适合的编程语言
  • 前端 CI/CD 流程:构建与自动化部署最佳实践
  • 基于 Python 与 SpringBoot 的大学生心理健康服务系统设计
  • VS Code C/C++ 开发环境配置指南
  • Qwen3Guard-Gen-WEB 内容安全审核与人工复核辅助方案
  • FlowMiner:基于流关联挖掘的加密流量分类模型
  • eNSP 基础网络配置命令速查指南
  • 渗透测试基本流程详解与常用工具
  • 法奥机器人 ROS2 环境搭建
  • Go Web 开发核心基础:HTTP 协议与实战指南
  • C++ 容器适配器与核心数据结构精解:栈、队列、Deque 底层实现与实战
  • EgoPoseFormer v2:解决 AR/VR 场景中的第一视角人体动捕问题
  • Mac Mini 部署 OpenClaw 实战指南
  • 清华大学发布 SuperBench 大模型评测报告:文心一言中文表现领先
  • 前端代码分割与懒加载实践
  • FPGA 实现 UART 串口通信详解
  • Ascend Whisper 高效部署实战:从模型优化到生产环境避坑指南
  • VSCode Copilot 接入智谱 GLM-4.6 及其他大模型配置指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online