如何通过变量名前缀调用已定义变量并获取其值?
问题:通过变量名片段获取对应变量的实际值
我尝试构建一个可通过已定义变量名称的部分内容自动调用这些变量的函数,示例代码如下:
List=('USGS46', 'USGS47', 'USGS48', 'USGS50') USGS46_d17O= -15.6579 USGS46_d18O= -29.4758 USGS47_d17O= -10.48288938 USGS47_d18O= -19.8374292 USGS48_d17O= -1.144217023 USGS48_d18O= -2.210739818 USGS50_d17O= 2.583133734 USGS50_d18O= 4.920460156 for x in List: print(print(f"{''+x+'_d17O'}"))
原本以为嵌套print会先输出变量名再调用变量,但实际返回结果是变量名和None:
USGS46_d17O None USGS47_d17O None USGS48_d17O None USGS50_d17O None
请问如何获取这些变量对应的实际值?
解决方法
1. 直接通过全局变量字典获取值
你的代码里嵌套print导致输出None,是因为print()函数本身没有返回值(返回None),外层print会把内层print的输出(变量名字符串)和返回值None一起打印。
要获取变量的实际值,可以利用Python的globals()函数,它会返回当前全局作用域的变量字典,通过拼接好的变量名作为键就能取出对应的值:
List=('USGS46', 'USGS47', 'USGS48', 'USGS50') USGS46_d17O= -15.6579 USGS46_d18O= -29.4758 USGS47_d17O= -10.48288938 USGS47_d18O= -19.8374292 USGS48_d17O= -1.144217023 USGS48_d18O= -2.210739818 USGS50_d17O= 2.583133734 USGS50_d18O= 4.920460156 for x in List: var_name = f"{x}_d17O" # 从全局变量字典中取出对应值 print(globals()[var_name])
运行后会输出:
-15.6579 -10.48288938 -1.144217023 2.583133734
2. 更规范的方式:用字典管理变量
直接使用全局变量拼接名字的方式不够直观,也不利于维护。更推荐用字典来组织这些相关变量,结构清晰且易于扩展:
# 用字典统一管理标准样品数据 standard_samples = { 'USGS46': {'d17O': -15.6579, 'd18O': -29.4758}, 'USGS47': {'d17O': -10.48288938, 'd18O': -19.8374292}, 'USGS48': {'d17O': -1.144217023, 'd18O': -2.210739818}, 'USGS50': {'d17O': 2.583133734, 'd18O': 4.920460156} } # 遍历字典获取d17O值 for sample_id in standard_samples: print(standard_samples[sample_id]['d17O'])
这种方式不仅能轻松获取d17O值,后续要访问d18O或者添加新的样品数据也更方便。
内容的提问来源于stack exchange,提问作者lordseal92
相关产品推荐
相关产品推荐

