深入理解 Python 中的「可迭代对象」,这是掌握循环、批量处理财务数据的核心概念。简单说,可迭代对象(Iterable)就是“能被逐个取出元素的容器”——比如你处理的 Excel 文件路径、发票金额列表、pandas 的财务列数据,本质都是可迭代对象,这也是 for 循环、list()、.glob() 能批量处理数据的基础。
本文结合财会场景,从「定义 → 判定 → 常见类型 → 核心特性 → 实操示例」逐层讲解。
一、核心定义:可迭代对象是什么?
在 Python 中,满足以下任一条件的对象就是「可迭代对象」:
-
实现了 iter() 方法(返回迭代器);
-
实现了 getitem() 方法(能通过索引取值,比如 obj[0]);
-
通俗理解:能被 for…in… 循环遍历,逐个取出元素的对象。
对财会场景来说,你可以把可迭代对象想象成:财务工作中的“清单”(比如发票清单、文件清单、金额清单),清单里的每一项就是“元素”。
二、如何快速判定一个对象是不是可迭代对象?
新手不用记复杂的方法,用 2 个简单方式即可:
三、财会场景最常见的可迭代对象(按使用频率排序)
以下是写财务脚本时每天都会接触的可迭代对象:
| 类型 | 财会示例 | 核心特点 | 遍历/转换 |
|---|---|---|---|
| 1. 列表 list | 发票金额 [10000.0, 25000.5] | 有序、可变、一次性加载 | for amt in amounts |
| 2. glob 生成器 | .glob(’*.xlsx’) 文件路径 | 有序、按需取值省内存、不可重复遍历 | for file in gen |
| 3. 元组 tuple | 税率 (0.03, 0.06, 0.13) | 有序、不可变、一次性加载 | for rate in tax_rates |
| 4. 字符串 str | 发票号 ‘SF20251201’ | 有序、不可变、按字符遍历 | for ch in invoice_no |
| 5. pandas Series | df[‘金额’] 金额列 | 有序、带索引、按值遍历 | for amt in df[‘金额’] |
| 6. range 对象 | 月份 range(1, 13) | 有序、按需生成数字、不可变 | for m in range(1,13) |
| 7. 集合 set | 去重客户 {甲公司,乙公司} | 无序、无重复、按需取值 | for c in customers |
四、可迭代对象的核心特性(新手必知)
1. 核心:“可遍历” ≠ “已加载”
这是最容易混淆的点,直接决定财务脚本性能:
-
一次性加载型(列表、元组、字符串):创建时就把所有元素加载到内存,遍历快但占内存多(如 10 万条金额列表);
-
按需取值型(生成器、range、glob 生成器):遍历到某个元素时才生成它,占内存极少,适合全年百万条流水。
2. 可迭代对象 ≠ 迭代器
-
可迭代对象:“能被遍历的容器”(比如列表),可以通过 iter(对象) 生成迭代器;
-
迭代器:“负责逐个取出元素的工具”(比如 glob 生成器),只能向前遍历,不能回头。
不用纠结严格区分,只需记住:只要能被 for 循环遍历,就是你需要的可迭代对象。
3. 部分可迭代对象只能遍历一次
比如 glob 生成器,遍历一次后就“空了”,第二次遍历无输出:
解决方法:需要多次遍历时,用 list() 转成列表(适合文件数量少的场景)。
4. 可迭代对象可以嵌套
比如“列表里套字典”(多笔发票信息),也是可迭代对象:
五、财会场景避坑与实操建议
1. 大量数据优先用“按需取值型”
处理全年 10 万条银行流水,不要直接转列表,而是逐个遍历:
2. glob 生成器遍历后为空,需重新生成
3. 用可迭代对象简化财务计算
六、综合示例:批量处理财务文件
总结
-
可迭代对象核心是“能被 for 循环逐个取出元素的容器”,是财务批量处理数据的基础;
-
高频类型:列表(金额)、glob 生成器(文件路径)、pandas Series(Excel 列)、range(月份);
-
关键技巧:少量数据用列表(遍历快),大量数据用生成器(省内存),避免遍历后为空的生成器复用。