如何在Python函数Moisture_transport中将vars()定义的变量设为全局变量
要实现你要的效果,直接在Moisture_transport函数内部操作全局命名空间即可,不需要再每次手动执行参数赋值后的那几行条件判断代码,修改后的示例如下:
def Moisture_transport(Scenario, Class, delta_crop): """ 保留原有函数的计算逻辑,这里仅新增全局变量创建逻辑 """ # --------------- 原有函数逻辑保留 --------------- # 这里替换成你原本计算Class_direct、Class_sum_cmr的业务代码 Class_direct = "示例返回值1" Class_sum_cmr = "示例返回值2" # --------------- 新增全局变量生成逻辑 --------------- # 生成基础变量名 direct_name = f"Moisture_direct_Scenario_{Scenario}_Class_{Class}" cmr_name = f"Moisture_with_CMR_Scenario_{Scenario}_Class_{Class}" # delta_crop为True时追加后缀 if delta_crop: direct_name += "_deltacrop" cmr_name += "_deltacrop" # 写入全局命名空间 globals()[direct_name] = Class_direct globals()[cmr_name] = Class_sum_cmr # 原有返回值可保留,不影响逻辑 return Class_direct, Class_sum_cmr
调用方式简化为:
# 只需定义参数后调用函数即可自动生成对应全局变量 Scenario = 2; Class = 1; delta_crop = True Moisture_transport(Scenario, Class, delta_crop) # 之后可直接访问生成的全局变量 print(Moisture_direct_Scenario_2_Class_1_deltacrop)
- 注意:如果使用Python3.6以下版本,不支持f-string语法,可将变量名拼接部分替换为你原有的字符串拼接写法即可。
更推荐的替代方案
动态生成全局变量后续调试、批量遍历实验结果都非常不便,更建议用字典统一存储所有实验结果,维护成本更低:
# 全局字典统一存储所有实验结果 moisture_results = {} def Moisture_transport(Scenario, Class, delta_crop): # 原有计算逻辑保留 Class_direct = "示例返回值1" Class_sum_cmr = "示例返回值2" # 以参数组合为key存入字典 result_key = (Scenario, Class, delta_crop) moisture_results[result_key] = { "direct": Class_direct, "with_cmr": Class_sum_cmr } return Class_direct, Class_sum_cmr # 调用后取值方式 print(moisture_results[(2, 1, True)]["direct"])
内容的提问来源于stack exchange,提问作者Ep1c1aN
相关产品推荐
相关产品推荐

