一、函数基础学习笔记
2026-02-21
Python基础
type
Post
status
Published
date
Feb 21, 2026
slug
python-function-basics-study-notes-1
summary
学了函数之后才明白,函数就像是把重复的代码打包成一个工具,需要的时候直接调用。这样代码更清晰,也更容易维护!
tags
Python函数
category
Python基础
icon
password
💡 学习感悟:学了函数之后才明白,函数就像是把重复的代码打包成一个工具,需要的时候直接调用。这样代码更清晰,也更容易维护!
1. 什么是函数?
函数是组织好的、可重复使用的代码块。
📝 我的理解:函数就像是洗衣机里的程序——你不需要每次都手动控制进水、洗涤、脱水,只需要按一个按钮(调用函数),洗衣机就会自动完成一系列操作。
2. 函数的定义与调用
2.1 基本语法
2.2 无参数、无返回值
📝 我的理解:def是 define(定义)的缩写。函数名后面必须加(),函数体要缩进 4 个空格。
2.3 带参数和返回值的函数
📝 我的理解:
- 参数是函数的输入口——
a, b是形参,3, 5是实参
- 返回值是函数的输出口——通过
return把结果传出来
3. 函数的参数(详解)
3.1 参数类型总览
3.2 位置参数
⚠️ 注意:顺序不能乱,否则结果就错了!
3.3 关键字参数
📝 我的理解:给参数贴上标签,不用管顺序,代码更清晰。
3.4 默认参数
⚠️ 注意:默认参数必须放在非默认参数后面!
3.5 可变参数
📝 我的理解:*args是可变长度的元组,**kwargs是可变长度的字典。
3.6 同时使用 *args 和 **kwargs
📝 我的理解:*args和**kwargs就像万能口袋——*args装任意数量的数据(位置参数),**kwargs装任意数量的配置(关键字参数)。这样写函数特别灵活,既可以传任意个数的数据,又可以加各种可选配置!
4. 函数的返回值
4.1 返回单个值
4.2 返回多个值
4.3 没有返回值
5. 函数嵌套调用
5.1 什么是嵌套调用
在一个函数中调用另一个函数。
函数调用遵循栈结构:
📝 我的理解:函数调用就像叠盘子——先调用的函数在栈底,后调用的在栈顶。执行完后,先返回栈顶的,再依次往下。
📝 我的理解:就像是流水线——一个函数负责一道工序,完成后再交给下一个函数。
5.2 实际应用示例
5.3 递归调用
递归是指函数在执行过程中调用自己。
递归是指函数在执行过程中调用自己。
递归的两个关键要素:
- 终止条件 —— 什么时候停止递归(如
n <= 1)
- 递归表达式 —— 如何调用自己(如
n * factorial(n - 1))
📝 我的理解:递归就像俄罗斯套娃——大娃娃里装着相同的小娃娃,一层一层往里找,直到找到最小的那个(终止条件),然后再一层一层返回结果。写递归时一定要记得写终止条件,不然就会无限循环!
6. 函数说明文档(Docstring)
6.1 Sphinx 格式
6.2 Google 格式
6.3 如何选择
场景 | 推荐格式 | 原因 |
个人/小项目 | Sphinx | 简洁,打字少 |
团队/大项目 | Google | 可读性强 |
6.4 查看文档
7. 踩坑记录
7.1 忘记调用函数
⚠️ 踩坑:say_hi是函数对象,say_hi()才是调用函数。
7.2 参数顺序错误
7.3 默认参数的陷阱
⚠️ 踩坑:默认参数在函数定义时创建,可变对象会被共享!
7.4 文档和代码不一致
⚠️ 踩坑:文档写了返回字典,实际返回字符串,会让使用者困惑。
8. 核心知识点整理
8.1 函数定义流程
8.2 参数类型速查
类型 | 语法 | 说明 |
位置参数 | def f(a, b) | 按顺序传 |
关键字参数 | f(a=1, b=2) | 按名称传 |
默认参数 | def f(a=1) | 有默认值 |
可变参数 | *args, **kwargs | 接收任意个数 |
8.3 常用内置函数
函数 | 作用 | 示例 |
len() | 获取长度 | len([1,2,3]) → 3 |
sum() | 求和 | sum([1,2,3]) → 6 |
max() | 最大值 | max([1,5,3]) → 5 |
min() | 最小值 | min([1,5,3]) → 1 |
Loading...
