Python中如何将字符串作为变量使用,用循环简化重复的条件判断代码
实现方案
推荐方案(可维护性更高)
优先选择预定义映射的写法,规避动态读取变量带来的不可控风险:
x = {} # 提前配对zone变量和对应的test变量 zone_list = [ (zone1, zone1_test), (zone2, zone2_test), (zone3, zone3_test) ] for idx, (zone_flag, test_val) in enumerate(zone_list, start=1): if zone_flag == 1: x[f'zone{idx}_val'] = test_val - 10
动态读取变量名方案
如果确实需要通过字符串拼接变量名读取值,可以用对应作用域的内置字典实现:
全局作用域下使用globals()
x = {} for i in range(1,4): if globals()[f'zone{i}'] == 1: x[f'zone{i}_val'] = globals()[f'zone{i}_test'] - 10
局部作用域下使用locals()
如果变量定义在函数内部,替换为locals()即可:
x = {} for i in range(1,4): if locals()[f'zone{i}'] == 1: x[f'zone{i}_val'] = locals()[f'zone{i}_test'] - 10
注意:动态读取变量名的写法可读性、可维护性都比较差,非特殊场景不建议使用。
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

