news 2026/4/23 13:57:57

【Python新手村】函数全攻略:从基础语法到匿名函数、递归的深度进阶!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Python新手村】函数全攻略:从基础语法到匿名函数、递归的深度进阶!

Python 函数入门:拒绝重复劳动,把代码变成“乐高积木”!

你好,未来的架构师!👋

在前面的学习中,你可能已经写了不少代码。但你有没有发现:如果你想在代码的不同地方执行相同的功能,你可能需要把同一段代码复制粘贴好几次。这种做法不仅累,而且容易出错。

今天我们要学习的函数(Function),就是专门为了实现“一次编写,到处运行”而生的。

一、 核心概念:函数是一个“黑盒”

从严谨的角度来看,函数可以被看作一个黑盒(Black Box)

  1. 输入(Input):你丢进盒子的原料(参数)。

  2. 处理(Process):盒子内部的加工逻辑。

  3. 输出(Output):加工完吐出来的成品(返回值)。

💡 个人理解:你不需要关心盒子内部是怎么转动的,你只需要知道:丢进什么,能得到什么。这种“封装”思想是现代软件工程的基石。

二、 函数的语法结构

在 Python 中,定义函数使用def关键字(define 的缩写)。

def 函数名(参数1, 参数2): """这里是函数的文档字符串(功能说明)""" # 这里是函数的逻辑代码 结果 = 参数1 + 参数2 return 结果

必须注意的严谨细节:

  • 冒号 (:):千万别漏掉,它代表代码块的开始。

  • 缩进:函数体内的所有代码必须保持一致的缩进。

  • 文档字符串:虽然不是强制的,但写清楚函数是干嘛的,是专业程序员的标志。

三、 实战演练:写一个自己的函数

def say_hello(name, time_of_day): """根据时间段向用户打招呼""" message = f"早上好, {name}!" if time_of_day == "morning" else f"你好, {name}!" return message # 调用函数 result = say_hello("小明", "morning") print(result) # 输出: 早上好, 小明!

四、 参数的奥秘:形参与实参

  • 形参(Formal Parameter):定义函数时写的变量名(占位符)。

  • 实参(Actual Parameter):调用函数时真正传入的值(真数据)。

💡 个人理解:你可以把参数想象成插座和插头。定义函数是装插座,调用函数是插插头。规格(参数顺序和类型)必须匹配。

五、 返回值:成果汇报

return决定了函数运行结束后给调用者留下什么。没有return的函数会默认返回None

六、 作用域:谁能看到这个变量?

  • 局部变量(Local):在函数内部定义,外面看不见。

  • 全局变量(Global):在函数外面定义,全村人都能看见。

七、 进阶:匿名函数 Lambda(代码界的“一次性餐具”)

有时候,我们需要一个极其简单的函数,它只用一次,甚至懒得给它起名字。这时候,lambda就派上用场了。

语法:lambda 参数: 表达式

# 普通函数写法 def add(x, y): return x + y # Lambda 写法 add_lambda = lambda x, y: x + y print(add_lambda(5, 3)) # 输出: 8

💡 个人理解:Lambda 就像是一次性纸杯。如果你只是口渴想喝口水,没必要买一套精致的陶瓷茶具(def定义)。但要注意:如果逻辑超过一行,请务必用正常的def强行用 Lambda 写复杂逻辑会导致代码难以维护。

八、 进阶:递归(逻辑界的“盗梦空间”)

递归是一个函数在内部调用自己。它听起来很玄学,但其实逻辑非常严谨。

递归的两个“生死准则”:

  1. 基准情况(Base Case):必须有一个明确的停止条件,否则会陷入死循环。

  2. 递归步骤(Recursive Step):不断向基准情况靠拢。

经典案例:阶乘计算(5! = 54321)

def factorial(n): # 1. 基准情况:如果 n 是 1,就不用再往下拆了 if n == 1: return 1 # 2. 递归步骤:n! 等于 n 乘以 (n-1)! return n * factorial(n - 1) print(factorial(5)) # 输出: 120

💡 个人理解:递归就像是《盗梦空间》。你进入了一层梦境,在梦里又入梦。每入一层,问题就变小一点,直到触及潜意识边缘(基准情况),然后一层层“醒来”,把结果带回现实。警告:Python 对递归深度有限制。如果嵌套太深,会报RecursionError

九、 总结:高质量编写函数的心得

  1. 单一职责:一个函数只做一件事。

  2. 见名知意:用动词命名。get_user_name优于name_func

  3. 副作用最小化:尽量不要修改函数外部的全局变量。

  4. 该简则简,该繁则繁:简单的逻辑用 Lambda,复杂的嵌套用递归,重复的业务用普通函数。

结语:掌握了函数、Lambda 和递归,你已经从代码的“搬运工”进化成了“架构师”。现在,去用这些“乐高积木”搭建你的程序大厦吧!

觉得这篇深度攻略有用?点个赞收藏一下,让你的函数写得像诗一样优雅!(。♥‿♥。)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 18:54:30

2025专科生必看!8个降AI率工具测评榜单

2025专科生必看!8个降AI率工具测评榜单 2025专科生必备的降AI率工具测评指南 近年来,随着高校和科研机构对AIGC检测技术的不断升级,论文、报告等文字内容的AI识别率成为学生和研究者必须面对的问题。尤其是对于专科生而言,写作水平…

作者头像 李华
网站建设 2026/4/23 11:27:43

Lua语言学习路径与应用场景全面解析

Lua语言学习路径与应用场景全面解析 Lua作为一种轻量级脚本语言,凭借其简洁高效的特性在多个领域展现出独特优势。学习Lua的最佳路径应遵循"基础语法→模块化编程→高级特性→实战项目"的系统化流程,特别强调协程机制和元表应用两大核心特性。…

作者头像 李华
网站建设 2026/4/23 9:48:27

为什么你的Open-AutoGLM跑不动?揭开模型加载失败背后的性能真相

第一章:为什么你的Open-AutoGLM跑不动?揭开模型加载失败背后的性能真相在尝试部署 Open-AutoGLM 时,许多开发者遭遇模型无法加载或运行缓慢的问题。这并非单一原因导致,而是由硬件、环境配置与模型依赖共同作用的结果。显存不足是…

作者头像 李华
网站建设 2026/4/22 18:43:49

口碑好的硬核隔音隔热门窗品牌推荐低端品牌

口碑好的硬核隔音隔热门窗低端品牌推荐引言在当今的家居装修中,门窗的隔音隔热性能至关重要。它不仅能为我们营造安静舒适的居住环境,还能有效降低能源消耗。对于预算有限的消费者来说,选择一款性价比高、口碑好的低端门窗品牌是关键。以下为…

作者头像 李华
网站建设 2026/4/22 13:26:27

前端新人必看:彻底搞懂 querySelector 与 querySelectorAll 的实战

前端新人必看:彻底搞懂 querySelector 与 querySelectorAll 的实战前端新人必看:彻底搞懂 querySelector 与 querySelectorAll 的实战用法引言:从“选不到元素”说起技术初印象:这两个方法到底是什么?深入 selector 语…

作者头像 李华