Python中如何将字符串转换为变量名构造目标变量列表
Python根据字符串列表获取同名变量生成新列表的实现方式
你可以通过查询Python作用域对应的命名空间字典实现这个需求,具体写法分两种场景:
- 全局作用域场景:如果
feature1、feature2是定义在全局的变量,用globals()获取全局命名空间字典,按字符串key取值即可
x = ['feature1', 'feature2'] # 提前定义好同名变量 feature1 = 123 feature2 = 456 y = [globals()[var_name] for var_name in x] print(y) # 输出 [123, 456]
- 局部作用域场景:如果同名变量定义在函数内部等局部范围,把
globals()替换为locals()获取局部命名空间字典即可
def demo(): feature1 = "局部变量1" feature2 = "局部变量2" x = ['feature1', 'feature2'] y = [locals()[var_name] for var_name in x] print(y) # 输出 ['局部变量1', '局部变量2'] demo()
注意:如果列表里的字符串没有对应的同名变量,上述写法会直接抛出
KeyError,需要容错的话可以改成globals().get(var_name, 兜底默认值)的形式,避免程序崩溃。
更规范的替代写法
非常不推荐在业务代码里频繁用globals/locals动态查变量,这种写法调试、维护成本极高,很容易出隐蔽bug。如果需要按字符串名称匹配对应值,一开始就用字典来存储名称和值的映射是更符合Python编码规范的方案:
# 用字典统一维护名称和值的映射关系,不需要侵入命名空间 feature_dict = { 'feature1': 123, 'feature2': 456 } x = ['feature1', 'feature2'] y = [feature_dict[name] for name in x]
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

