跳到主要内容Python 核心基础:函数、列表与元组实战指南 | 极客日志Python算法
Python 核心基础:函数、列表与元组实战指南
Python 函数、列表与元组是构建程序的基础组件。函数通过封装逻辑实现代码复用,支持默认参数、关键字参数及递归调用,需注意作用域管理。列表作为可变序列容器,提供丰富的增删改查与切片操作;元组则不可变,适用于存储固定数据及作为字典键。掌握三者特性及差异,能有效提升代码的可维护性与运行效率,是 Python 进阶的必经之路。
雾岛听风18 浏览 前言
作为 Python 初学者,掌握函数、列表、元组是从'写代码'到'写好代码'的关键一步。它们不仅是语法的核心,更是后续处理复杂数据、构建高效程序的基础。今天这篇文章,结合实战案例,把这三个知识点讲透。
一、函数:告别重复代码的'工厂'
1.1 为什么需要函数?
写代码最忌讳的就是'复制粘贴'。比如计算不同区间的数列和(1-100、300-400),如果不使用函数,需要重复写多组几乎一样的循环代码。
theSum = 0
for i in range(1, 101):
theSum = theSum + i
print(theSum)
theSum = 0
for i in range(300, 401):
theSum = theSum + i
print(theSum)
一旦需要修改计算逻辑(比如改成求平方和),所有重复代码都要改,效率极低。而函数的核心作用,就是提取重复代码,实现代码复用,让程序更简洁、更好维护。
简单理解:函数就像一个'工厂',输入'原材料'(参数),经过内部加工(函数体),输出'产品'(返回值),一次定义,多次调用。
def calc_sum(begin, end):
the_sum = 0
for i in range(begin, end + 1):
the_sum = the_sum + i
return the_sum
print(calc_sum(1, 100))
print(calc_sum(300, 400))
1.2 函数的核心语法
(1)函数定义与调用
def calc_sum(beg, end):
sum_val = 0
for i in range(beg, end + 1):
sum_val += i
return sum_val
result1 = calc_sum(1, 100)
result2 = calc_sum(300, 400)
print(result1, result2)
- 函数必须先定义,再调用,否则会报
NameError;
- 定义函数时不会执行函数体,只要调用时才会执行,调用几次就执行几次;
- 形参和实参的个数必须匹配,否则报
TypeError。
(2)函数参数的灵活用法
Python 的函数参数比 C++、Java 更灵活,核心有 3 个特性:
1. 动态类型:形参无需指定类型,一个函数可接收多种类型参数
def print_param(a):
print(a)
print_param(10)
print_param("hello")
print_param(True)
2. 参数默认值:给形参设置默认值,调用时可省略该参数
def add(x, y, debug=False):
if debug:
print(f"调试:x={x}, y={y}")
return x + y
print(add(10, 20))
print(add(10, 20, True))
3. 关键字参数:调用时显示指定'实参对应哪个形参',可打乱传参顺序
def test(x, y):
print(f"x = {x}")
print(f"y = {y}")
test(x=10, y=20)
test(y=100, x=200)
(3)函数返回值
1. 一个函数可以有多个 return 语句,执行到 return 时函数立刻结束
def is_odd(num):
if num % 2 == 0:
return False
else:
return True
print(is_odd(10))
print(is_odd(19))
2. 一次返回多个值:用逗号分隔,接收时用多个变量接收
def get_point():
x = 10
y = 20
return x, y
_, b = get_point()
(4)变量作用域
变量的作用域决定了'变量能在哪些地方使用',核心规则:
- 局部变量:函数内部定义的变量,仅在函数内部生效;
- 全局变量:函数外部定义的变量,函数内部可访问,但修改时需要用
global 声明;
- 同名变量:不同作用域可存在同名变量(本质是不同变量,互不影响)。
x = 10
def test():
global x
x = 20
test()
print(f'x = {x}')
1.3 函数的进阶用法
(1)链式调用
def is_odd(num):
return num % 2 != 0
def add(x, y):
return x + y
(2)嵌套调用
函数内部调用其他函数(包括自身)。每次函数调用,都会在调用栈里新增一个元素,称为栈帧。在调试状态下,可以看到函数调用栈和各自栈帧中的局部变量。
(3)递归调用
递归是嵌套调用的特殊情况,核心是'有结束条件 + 每次逼近结束条件',否则会无限递归导致 RecursionError。
案例:递归计算 5 的阶乘 (5! = 5 * 4 * 3 * 2 * 1)。
def factor(n):
if n == 1:
return 1
return n * factor(n - 1)
print(factor(5))
⚠️ 注意:递归代码简洁但难理解,易栈溢出,实际开发中优先用循环替代。
1.4 函数核心小结
- 定义:
def 函数名 (形参):函数体 return 返回值;
- 调用:支持默认值、关键字参数;
- 核心价值:复用代码,拆分逻辑,让程序更容易维护。
二、列表和元组:批量存储数据的'容器'
当需要存储多个数据(比如 10 个学生的成绩,20 个城市名)时,单独定义多个变量不现实,此时就需要列表(list)和元组(tuple)——它们是 Python 中最常用的'序列类型',专门用来批量存储数据。
- 列表(list):可变容器(像'散装辣条'),元素可增删改;
- 元组(tuple):不可变容器(像'包装辣条'),元素创建后无法修改。
2.1 列表(list):最常用的可变容器
(1)创建列表
a = []
print(type(a))
b = list()
print(type(b))
a = [1, 2, 3, 4]
print(a)
a = [1, 'hello', True, [4, 5, 6]]
print(a)
⚠️ 注意:不要用 list 作为变量名(会覆盖内置函数 list()),建议命名为 list1、alist 等。
(2)列表的核心操作
列表的操作都围绕'下标'展开,下标从 0 开始(负数表示倒数,-1 是最后一个元素),核心操作如下:
| 操作目的 | 代码示例 | 说明 |
|---|
| 访问元素 | list3[2] | 访问下标 2 的元素,下标越界报 IndexError |
| 修改元素 | list3[2] = 100 | 把下标 2 的元素改成 100 |
| 切片(取子列表) | list3[1:3] | 取下标 1 到 3(左闭右开)的元素 |
| 新增元素 | list3.append(5) | 尾插;list3.insert(1, "a")(插入到下标 1) |
| 删除元素 | list3.pop() | 删除末尾元素;list3.remove(2)(按值删除) |
| 查找元素 | 2 in list3 | 判断元素是否存在;list3.index(2)(找下标) |
| 连接列表 | list3 + list4 | 拼接两个列表(生成新列表);list3.extend(list4)(拼接到 list3 末尾) |
| 遍历元素 | for elem in list3: | 直接遍历元素(推荐) |
a = [1, 2, 3, 4]
print(a[2])
print(a[-1])
print(len(a))
for elem in a:
print(elem)
i = 0
while i < len(a):
print(a[i])
i += 1
a = [1, 2, 3, 4]
a.append(5)
print(a)
a.insert(1, "hello")
print(a)
a.pop()
print(a)
a = ["aa", "bb", "cc"]
a.remove("cc")
print(a)
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a)
(3)切片操作的灵活用法
切片是列表的'灵魂操作',支持省略边界、指定步长(正数从左到右,负数从右到左)。
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[1:3])
print(a[1:])
print(a[:2])
print(a[:-1])
print(a[:])
print(a[::2])
print(a[1:-1:2])
print(a[::-1])
print(a[1:100])
2.2 元组(tuple):不可变的序列容器
元组的用法和列表几乎一致,但核心区别是'不可变'(元素无法增删改),适合存储不需要修改的数据(比如身份证号,坐标)。
(1)创建元组
用 () 表示,空元组用 () 或 tuple(),注意单个元素的元组要加逗号(避免被当作普通括号)。
a = ()
print(type(a))
b = tuple()
print(type(b))
a = (1, 2, 3, 4)
print(a)
a = (1, 2, 'hello', True, [])
print(a)
(2)元组的核心操作
- 支持的操作(和列表一致):访问下标、切片、遍历、in 判断、index 查找、+ 拼接;
- 不支持的操作(因为不可变):修改元素、
append/insert/pop/remove/extend。
a = (1, 2, 3, 4)
print(a[1])
print(a[-1])
print(a[1:3])
for elem in a:
print(elem)
print(3 in a)
print(a.index(3))
b = (4, 5, 6)
print(a + b)
def get_point():
x = 10
y = 20
return x, y
x, y = get_point()
print(type(get_point()))
(3)为什么有了列表,还需要元组?
- 安全性:传递数据时,用元组可避免数据被意外修改(比如传给一个未知函数,元组更安全);
- 可作为字典的键:字典的键必须是'可哈希对象'(不可变类型),元组可以,列表不行。
2.3 列表和元组小结
| 特性 | 列表(list) | 元组(tuple) |
|---|
| 定义方式 | [] 或 list() | () 或 tuple() |
| 是否可变 | 可变(增删改) | 不可变(无增删改) |
| 适用场景 | 需频繁修改数据(比如学生成绩) | 数据无需修改(比如身份证号) |
| 核心操作 | 支持所有序列操作 + 增删改 | 仅支持读操作,无写操作 |
列表和元组都是日常开发中最常用到的类型,最核心的操作就是根据 [ ] 来按下标操作。如果元素不需要改变,则优先考虑元组;如果元素需要改变,则优先考虑列表。
结尾
掌握函数、列表与元组,意味着你掌握了 Python 编程的基石。函数让逻辑清晰可复用,列表与元组让数据处理更高效。在实际项目中,合理选择可变与不可变容器,不仅能提升代码健壮性,还能避免许多潜在的 Bug。希望这些内容能帮你打通学习中的卡点,在 Python 之路上走得更稳。
相关免费在线工具
- 加密/解密文本
使用加密算法(如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