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

Python 函数进阶:作用域、高阶函数与递归

Python 函数进阶涉及变量作用域、高阶函数、递归及 Lambda 表达式等核心概念。文章详细讲解了全局与局部变量的区别及修饰方法,阐述了高阶函数的定义与内置函数 map、filter 的使用,分析了递归的原理、三原则及代码示例,并介绍了 Lambda 匿名语法的语法与实战场景。通过清理冗余推广内容并补全技术细节,提供了完整的 Python 函数进阶学习指南。

WenxuanMa发布于 2025/2/6更新于 2026/7/2140 浏览
Python 函数进阶:作用域、高阶函数与递归

Python 函数进阶

在 Python 编程中,函数是组织代码的基本单元。掌握函数的进阶技巧,包括变量作用域管理、高阶函数应用、递归逻辑以及 Lambda 表达式,能够显著提升代码的复用性和可维护性。

变量的作用域

一个程序中的所有变量并不是在任何位置都可以访问的。访问权限取决于变量是在哪里赋值的。变量的作用域决定了在哪一部分程序中你可以访问哪个特定的变量名称。

全局变量

全局变量是在函数外部定义的变量,可以在整个脚本的任何地方被访问(除非被局部变量遮蔽)。

global_var = "I am global"

def print_global():
    print(global_var)

print_global()

局部变量

局部变量是在函数内部定义的变量,只能在定义它的函数内部访问。

def func():
    local_var = "I am local"
    print(local_var)

func()
# print(local_var) # 这里会报错,NameError

修改变量作用域

在函数内部修改全局变量需要使用 global 关键字声明。如果希望修改嵌套作用域中的非全局变量,可以使用 nonlocal 关键字。

count = 0

def increment():
    global count
    count += 1
    return count

print(increment())  # 输出 1
print(increment())  # 输出 2

# nonlocal 示例
def outer():
    x = 10
    def inner():
        nonlocal x
        x = 20
        print(x)
    inner()
    print(x)

outer()  # 输出 20, 20

高阶函数

高阶函数是指至少满足以下两个条件之一的函数:

  1. 接受一个或多个函数作为参数。
  2. 返回一个函数。

什么是高阶函数?

函数的参数为另一个函数

将函数作为参数传递给其他函数,可以实现回调机制或通用算法。

def apply_operation(func, value):
    return func(value)

def double(x):
    return x * 2

result = apply_operation(double, 5)
print(result)  # 输出 10
函数的返回值为另一个函数

函数可以返回另一个函数对象,常用于闭包场景。

def make_multiplier(n):
    def multiplier(x):
        return x * n
    return multiplier

times_two = make_multiplier(2)
times_three = make_multiplier(3)

print(times_two(5))   # 输出 10
print(times_three(5)) # 输出 15

内置高阶函数

map() 函数

map() 函数接收一个函数和一个可迭代对象,将函数作用于该对象的每个元素,并返回迭代器。

nums = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, nums))
print(squared)  # 输出 [1, 4, 9, 16]
filter() 函数

filter() 函数用于过滤序列,只保留使函数返回 True 的元素。

nums = [1, 2, 3, 4, 5, 6]
even_nums = list(filter(lambda x: x % 2 == 0, nums))
print(even_nums)  # 输出 [2, 4, 6]

递归

递归是指函数在其定义中调用自身的过程。它是解决复杂问题的一种强大工具,但需要谨慎使用以避免栈溢出。

函数内部自己调用自己

递归的核心在于将大问题分解为规模更小的同类子问题。

必须有出口

递归必须包含终止条件(基准情况),否则会导致无限循环和栈溢出错误。

数字累加和示例

计算从 1 到 n 的数字累加和。

def sum_recursive(n):
    if n == 1:
        return 1
    return n + sum_recursive(n - 1)

print(sum_recursive(5))  # 输出 15

执行流程

当调用 sum_recursive(5) 时,系统会建立多个栈帧,直到达到基准条件 n=1,然后逐层返回结果。

递归三原则

  1. 递归必须有停止条件:确保递归不会无限进行。
  2. 递归必须改变其状态并向停止条件靠近:每次调用应更接近基准情况。
  3. 递归必须递归地调用自己:核心逻辑通过自我调用来实现。

lambda 表达式

lambda 表达式,又名匿名函数,用于创建小型的单行函数对象。

适用场景

如果一个函数有一个返回值,并且只有一句代码,可以使用 lambda 简化。

语法

lambda arguments: expression
  • 注意:lambda 表达式的参数可有可无,函数的参数在 lambda 表达式中完全适用。
  • lambda 函数能接收任何数量的参数,但只能返回一个表达式的值。

快速上手

add = lambda x, y: x + y
print(add(3, 5))  # 输出 8

夹带参数

lambda 常与高阶函数配合使用,如 map 和 filter。

names = ['Alice', 'Bob', 'Charlie']
upper_names = list(map(lambda name: name.upper(), names))
print(upper_names)  # 输出 ['ALICE', 'BOB', 'CHARLIE']

总结

本文介绍了 Python 函数的高级特性。理解变量作用域有助于避免命名冲突;掌握高阶函数和内置函数(map/filter)能提升代码简洁度;递归适用于分治类问题;Lambda 表达式则适合轻量级函数定义。在实际开发中,应根据具体场景选择合适的方式,平衡可读性与性能。

目录

  1. Python 函数进阶
  2. 变量的作用域
  3. 全局变量
  4. 局部变量
  5. print(local_var) # 这里会报错,NameError
  6. 修改变量作用域
  7. nonlocal 示例
  8. 高阶函数
  9. 什么是高阶函数?
  10. 函数的参数为另一个函数
  11. 函数的返回值为另一个函数
  12. 内置高阶函数
  13. map() 函数
  14. filter() 函数
  15. 递归
  16. 函数内部自己调用自己
  17. 必须有出口
  18. 数字累加和示例
  19. 执行流程
  20. 递归三原则
  21. lambda 表达式
  22. 适用场景
  23. 语法
  24. 快速上手
  25. 夹带参数
  26. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 大模型学习进阶五阶段:从入门到应用的路径解析
  • 基于微服务的智能家居物联网平台实践
  • QUEST 一体机 SideQuest 安装 APK 与 OBB 数据包教程
  • Whisper-WebUI 语音转文字工具实战指南
  • 全栈开发的演变:从 LAMP 到 MEAN 再到现代 JavaScript
  • DeepSeek 爆发期,前端工程师的转型路径与核心价值
  • 全员 DeepSeek 时代:前端开发范式变革与实践
  • LangGraph v0.1 正式发布:构建自定义认知架构的新工具
  • Python 开发常用库大全及分类介绍
  • 前端面试核心考点梳理:从基础原理到框架实战
  • 新机型 Copilot 键替代右 Ctrl 键的解决方案
  • Sora2 Pro API Python 接入指南:4K 视频生成实战
  • LLM 技术图谱解析:从基础设施到应用的全景指南
  • System Verilog 基础与高级验证教程
  • System Verilog 核心教程:从基础语法到验证架构
  • Flutter 全方位深入探索与实战指南
  • Qt 与 Web 混合编程:CEF 与 QCefView 深度解析
  • 前端通用 AI Rules 定义:适配 Cursor、Trae 等主流工具
  • 智元机器人三大产线与 5000 台量产里程碑
  • JavaSE 核心语法与面向对象编程复习指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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