
本文介绍如何通过 python 循环与 f-string 模板重构重复性高的多国经济模型方程代码,支持任意数量国家的快速添加、变量自动拼接和结构一致性保障,显著降低维护成本与代码行数。
本文介绍如何通过 python 循环与 f-string 模板重构重复性高的多国经济模型方程代码,支持任意数量国家的快速添加、变量自动拼接和结构一致性保障,显著降低维护成本与代码行数。
在构建跨国宏观经济模型(如开放经济 DSGE 或存量-流量一致模型)时,常需为数十个国家编写结构高度相似的方程组——例如可支配收入、财富积累、税收、央行利润和政府预算约束等。若为每个国家手工复制粘贴并修改变量名(如 YDrUK, YDrUS, YDrDE),不仅易出错、难以维护,还会导致代码膨胀、参数调整困难、新增国家成本极高。
核心思路是:将国家标识符抽象为数据驱动的可迭代对象,用模板化字符串生成逻辑统一的方程表达式。
推荐使用 itertools.product 配合 f-string 实现灵活的单国/双边组合遍历,并辅以条件过滤避免冗余(如跳过 c1 == c2 的自循环项)。
✅ 基础单国方程:简洁可扩展
countries = ['UK', 'US', 'DE', 'FR', 'JP'] # 新增国家只需在此列表追加
for c in countries:
model.add(f'YDr{c} = (Y{c} + R{c}(-1)*Bd{c}{c}(-1) + XR{c}R{c}*R{c}(-1)*Bs{c}{c}(-1))*(1 - theta{c}) + d(XR{c}R{c})*Bs{c}{c}(-1)')
model.add(f'YDhs{c} = YDr{c} + d(XR{c}R{c})*Bs{c}{c}(-1)')
model.add(f'V{c} - V{c}(-1) = YDr{c} - CONS{c}')
model.add(f'T{c} = theta{c}*(Y{c} + R{c}(-1)*Bd{c}{c}(-1) + XR{c}R{c}*R{c}(-1)*Bs{c}{c}(-1))')
model.add(f'Bs{c} = Bs{c}(-1) + G{c} + R{c}(-1)*Bs{c}(-1) - T{c} - Fcb{c}')
⚠️ 注意:XR{c}R{c} 是示例占位符;实际中若存在跨国外汇变量(如 XRUS 表示英镑兑美元汇率),应定义 exchange_rates = {'UK': 'XRUS', 'US': 'XRUK', ...} 并在循环中查表引用。
✅ 双边交互方程:自动处理“源-目标”关系
对于含跨境项的方程(如英国对美投资 BsUKUS、美国对英利息收入 RUS(-1)*BsUKUS(-1)),使用笛卡尔积生成所有有序国家对,并排除自循环:
from itertools import product
for c1, c2 in product(countries, repeat=2):
if c1 == c2:
continue # 跳过 UK→UK 等无意义项
model.add(f'YDr{c1} = (Y{c1} + R{c1}(-1)*Bd{c1}{c1}(-1) + XR{c2}*R{c2}(-1)*Bs{c1}{c2}(-1))*(1 - theta{c1}) + d(XR{c2})*Bs{c1}{c2}(-1)')
model.add(f'YDhs{c1} = YDr{c1} + d(XR{c2})*Bs{c1}{c2}(-1)')
model.add(f'Fcb{c1} = R{c1}(-1)*Bcbd{c1}{c1}(-1)' +
(f' + R{c2}(-1)*Bcbs{c1}{c2}(-1)*XR{c2}' if c2 != c1 else ''))
✅ 进阶建议:提升可维护性与可读性
- 参数集中管理:将 thetaUK, thetaUS 等参数存为字典 theta = {'UK': 0.25, 'US': 0.30, ...},方程中写为 theta[{c}];
- 方程分组封装:按模块(如“家庭部门”、“政府财政”、“央行账户”)组织循环,增强逻辑清晰度;
- 注释自动化:在 model.add() 前插入动态注释,如 # {c}: Disposable income (Eq.12.{n});
- 校验与调试:首次运行时打印全部生成方程(用 print() 替代 model.add()),确认变量名拼接无误;
- 未来扩展预留:若需支持三边或区域聚合(如 EU),可将 countries 改为嵌套结构或引入 Region 类。
通过该结构化方法,新增一个国家仅需在 countries 列表中添加其代码(如 'CN'),所有相关方程将自动覆盖生成——真正实现“一次定义、全域生效”,兼顾严谨性、简洁性与工程可维护性。










