3、Python基础语法速成:变量、数据类型、列表、字典、元组、集合、条件判断、循环、函数定义与调用
财务数据处理的核心工作——无论是从Excel读取销售明细、清洗缺失值、计算月度汇总,还是生成经营分析报表——本质上都是对数据的存储、筛选、迭代和计算。Python之所以能成为财务自动化的首选语言,正是因为它用极简的语法提供了强大的数据结构(列表、字典、元组、集合)和流程控制能力。本章将围绕财务场景,快速建立Python核心语法基础,确保你能够读懂并编写基本的财务数据处理脚本。
3.1 变量与基本数据类型:财务数据的“存储单元”
核心原理
变量是内存中用于存储数据的命名位置。在Python中,变量不需要声明类型,赋值即创建。财务场景中,我们常用变量暂存金额、税率、客户名称、日期等。基本数据类型包括:整数(int)、浮点数(float)、字符串(str)、布尔值(bool)。理解类型是后续进行数值计算和条件判断的前提。
判断方法或操作流程
- 命名规范:使用小写字母和下划线,如
total_amount、tax_rate,避免使用Python保留字(如if、for)。 - 动态类型:Python会根据赋值自动推断类型,但需注意不同类型间不能直接运算(如字符串与整数相加会报错)。
- 类型转换:使用
int()、float()、str()进行显式转换,这在从Excel读取数字字符串时尤为重要。
案例拆解:处理含税金额
假设从报表中读取到“含税金额”为字符串 "1130",需要计算不含税金额(税率13%)。
amount_str = "1130"
tax_rate = 0.13
amount_float = float(amount_str) # 转换为浮点数
amount_excl = amount_float / (1 + tax_rate)
print(f"不含税金额: {amount_excl:.2f}") # 输出: 不含税金额: 1000.00
常见误区与总结
0.1+0.2 != 0.3)。对于精确计算(如税额、利息),建议使用 Decimal 模块或先将金额转换为“分”为单位的整数。| 数据类型 | 财务应用示例 | 注意事项 |
|---|---|---|
| int | 凭证号、数量、年份 | 大整数运算安全 |
| float | 单价、税率、比率 | 避免直接比较相等 |
| str | 客户名、科目编码、日期字符串 | 注意编码(UTF-8) |
| bool | 是否已审核、是否超预算 | 用于条件判断 |
3.2 核心数据结构:列表、字典、元组、集合
核心原理
数据结构决定了数据如何组织和访问。列表(list)是有序的可变序列,适合存储流水明细;字典(dict)以键值对存储,适合科目编码与名称的映射;元组(tuple)不可变,适合存储固定不变的记录(如坐标、常量配置);集合(set)自动去重,适合提取不重复的客户列表或科目列表。
操作流程与选择标准
- 列表:用方括号
[]定义,支持追加(append)、索引、切片。财务中常用于存储多行费用明细。 - 字典:用花括号
{}定义,通过键快速取值。例如subject_map = {"1001": "库存现金", "1002": "银行存款"}。 - 元组:用圆括号
()定义,不可修改。适合存储如("2024-01-31", "期末余额")这类固定结构。 - 集合:用
set()或花括号(无冒号)定义,自动去重。例如提取所有出现过的客户编号。
案例拆解:月度费用汇总
某财务人员需要汇总1月份各部门的差旅费总额。数据源为Excel导出的列表,每行包含部门、费用类型、金额。
# 原始数据:列表嵌套字典
expenses = [
{"dept": "销售部", "type": "差旅费", "amount": 3500},
{"dept": "市场部", "type": "差旅费", "amount": 2800},
{"dept": "销售部", "type": "办公费", "amount": 1200},
{"dept": "市场部", "type": "差旅费", "amount": 1900},
]
# 用字典汇总差旅费
travel_total = {}
for item in expenses:
if item["type"] == "差旅费":
dept = item["dept"]
# 如果部门不在字典中,初始化为0
travel_total[dept] = travel_total.get(dept, 0) + item["amount"]
print(travel_total) # 输出: {'销售部': 3500, '市场部': 4700}
常见误区与总结
get(key, default) 方法比直接 dict[key] 更安全,避免键不存在时抛出 KeyError。在财务数据处理中,经常需要先判断键是否存在,get 方法可以简化代码。| 结构 | 可变性 | 顺序 | 去重 | 典型财务用途 |
|---|---|---|---|---|
| 列表 | 可变 | 有序 | 否 | 流水明细、待处理清单 |
| 字典 | 可变 | 有序(Python3.7+) | 键唯一 | 科目映射、汇总统计 |
| 元组 | 不可变 | 有序 | 否 | 固定配置、函数多返回值 |
| 集合 | 可变 | 无序 | 是 | 去重、交集/差集运算 |
3.3 条件判断与循环:控制财务逻辑
核心原理
条件判断(if)让程序根据数据值执行不同分支,例如判断是否超预算、是否属于特定科目。循环(for、while)用于批量处理数据,例如遍历所有凭证、逐行计算折旧。两者结合是财务自动化脚本的核心引擎。
判断方法或操作流程
- if 语句:
if 条件: ... elif 条件: ... else: ...。注意缩进(通常4个空格)表示代码块。 - for 循环:
for 变量 in 可迭代对象:,适合遍历列表、字典的键、字符串等。 - while 循环:
while 条件:,适合不确定次数的迭代,但需小心死循环。 - break / continue:
break跳出整个循环,continue跳过本次循环进入下一次。
案例拆解:坏账计提判断
企业按账龄计提坏账准备:账龄超过90天计提20%,超过180天计提50%。现有应收账款列表,需要计算应计提金额。
receivables = [
{"customer": "A公司", "days": 120, "amount": 50000},
{"customer": "B公司", "days": 200, "amount": 30000},
{"customer": "C公司", "days": 60, "amount": 80000},
]
total_provision = 0
for r in receivables:
if r["days"] > 180:
rate = 0.5
elif r["days"] > 90:
rate = 0.2
else:
rate = 0
provision = r["amount"] * rate
total_provision += provision
print(f"{r['customer']} 计提: {provision:.2f}")
print(f"坏账准备总额: {total_provision:.2f}")
常见误区与总结
while 循环务必确保条件最终会变为 False,否则会造成死循环导致程序卡死。3.4 函数定义与调用:模块化财务计算
核心原理
函数是组织好的、可重复使用的代码块。在财务中,将“计算增值税”“计算折旧”“格式化金额”等操作封装为函数,可以避免重复代码,提高可读性和可维护性。函数通过 def 关键字定义,使用 return 返回结果。
操作流程
- 定义函数:
def 函数名(参数1, 参数2=默认值):,函数体缩进。 - 调用函数:
函数名(实际参数),参数传递方式有位置参数、关键字参数。 - 返回值:使用
return返回一个或多个值(多个值以元组形式返回)。 - lambda 函数:匿名函数,适用于简单操作,如
lambda x: x * 1.13。
案例拆解:封装金额格式化函数
财务报表中经常需要将数字格式化为千分位字符串,并保留两位小数。我们封装一个通用函数。
def format_amount(value, currency="¥"):
"""将数值格式化为财务金额字符串"""
if not isinstance(value, (int, float)):
raise ValueError("金额必须是数字")
return f"{currency}{value:,.2f}"
# 调用示例
print(format_amount(1234567.891)) # 输出: ¥1,234,567.89
print(format_amount(99999, currency="$")) # 输出: $99,999.00
常见误区与总结
global 关键字,但财务脚本中应尽量避免依赖全局变量,而是通过参数传递和返回值交换数据,这样更易于测试和调试。另外,定义函数时设置默认参数可以增强灵活性,但默认参数必须是不可变类型(如 None、数字、字符串),避免使用列表或字典作为默认值。| 函数特性 | 财务应用价值 | 示例 |
|---|---|---|
| 参数默认值 | 税率、币种等常用参数可省略 | def calc_tax(amount, rate=0.13) |
| 多返回值 | 同时返回本金和利息 | return principal, interest |
| lambda | 排序、筛选时快速定义规则 | sorted(data, key=lambda x: x['amount']) |