深入理解 Python 中的「可迭代对象」,这是掌握循环、批量处理财务数据的核心概念。简单说,可迭代对象(Iterable)就是“能被逐个取出元素的容器”——比如你处理的 Excel 文件路径、发票金额列表、pandas 的财务列数据,本质都是可迭代对象,这也是 for 循环、list()、.glob() 能批量处理数据的基础。

本文结合财会场景,从「定义 → 判定 → 常见类型 → 核心特性 → 实操示例」逐层讲解。

一、核心定义:可迭代对象是什么?

在 Python 中,满足以下任一条件的对象就是「可迭代对象」:

  1. 实现了 iter() 方法(返回迭代器);

  2. 实现了 getitem() 方法(能通过索引取值,比如 obj[0]);

  3. 通俗理解:能被 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. 用可迭代对象简化财务计算

六、综合示例:批量处理财务文件

总结

  1. 可迭代对象核心是“能被 for 循环逐个取出元素的容器”,是财务批量处理数据的基础;

  2. 高频类型:列表(金额)、glob 生成器(文件路径)、pandas Series(Excel 列)、range(月份);

  3. 关键技巧:少量数据用列表(遍历快),大量数据用生成器(省内存),避免遍历后为空的生成器复用。