Python中如何实现类似PHP循环内动态调用变量名的功能
Python 动态访问规则命名变量的实现方法
Python 支持和你写的PHP示例对等的动态变量访问能力,不过不同实现方式的适用场景、编码规范度有区别,具体如下:
- 推荐方案:用容器类型统一存储批量处理的变量
对于命名规则统一、需要循环遍历处理的同类型数据,Python 社区最推荐直接用列表、字典这类原生容器存储,不需要单独定义var_1/var_2/var_3这类零散变量,可维护性最高,对应写法:
如果需要保留明确的变量名映射,用字典存储更灵活:# 按顺序存储三个变量的值 vars_group = ["", "something", ""] for i in range(3): current_val = vars_group[i] if current_val == "": # 对应空值的处理逻辑 pass else: # 对应非空值的处理逻辑 passvars_dict = { "var_1": "", "var_2": "something", "var_3": "" } for i in range(1, 4): current_val = vars_dict[f"var_{i}"] # 后续判断逻辑同上 - 对等PHP写法的动态变量名访问
如果你已经单独定义了零散的规则命名变量,和PHP的${"var_".$i}逻辑完全一致的写法是直接读取作用域字典:局部变量可以通过locals()获取,全局变量可以通过globals()获取,两者都返回存储当前作用域变量的字典,key为变量名字符串,value为变量值,示例:var_1 = "" var_2 = "something" var_3 = "" for i in range(1, 4): # 拼接变量名后直接从作用域字典取值 current_val = locals()[f"var_{i}"] if current_val == "": # 空值处理逻辑 pass else: # 非空值处理逻辑 pass注意:这种写法可维护性较差,如果拼接的变量名不存在会直接抛出KeyError,且代码静态检查工具无法识别这类变量引用,非特殊场景不推荐使用。
- 类实例动态属性访问
如果要动态访问的是类实例的属性,用内置函数getattr即可:class TestObj: def __init__(self): self.var_1 = "" self.var_2 = "something" self.var_3 = "" obj = TestObj() for i in range(1,4): current_val = getattr(obj, f"var_{i}") # 后续处理逻辑同上
内容的提问来源于stack exchange,提问作者Marchel Gunawan Dwi Steya
相关产品推荐
相关产品推荐

