Python如何创建变量名包含其他变量值的动态变量
Python动态拼接生成变量名的实现方案
你可以通过两种方式实现「将固定前缀和已有变量值拼接作为新变量名」的需求,按推荐优先级排序如下:
- 优先使用字典存储(推荐)
动态命名的变量本质是键值对映射,用字典管理不会污染全局/局部命名空间,也不会出现变量名意外冲突、覆盖已有变量的问题,后续批量操作、维护都更方便。
示例代码:
如果要多次复用这个逻辑,可以简单封装成工具函数:# 已有变量 time = "0915" # 初始化存储动态变量的字典 dynamic_vars = {} # 拼接变量名,作为字典的键存入对应值 dynamic_vars[f"x_{time}"] = "some value" # 调用时直接通过键取值即可 print(dynamic_vars["x_0915"]) # 输出:some valuedef set_dynamic_val(prefix: str, suffix: str, val, storage: dict = None): if storage is None: storage = {} var_key = f"{prefix}_{suffix}" storage[var_key] = val return storage # 复用示例 time1 = "0915" time2 = "1030" my_vars = {} my_vars = set_dynamic_val("x", time1, "开盘集合竞价值", my_vars) my_vars = set_dynamic_val("x", time2, "连续竞价第一笔值", my_vars) print(my_vars["x_0915"], my_vars["x_1030"]) - 直接在作用域生成真实变量(不推荐,仅特殊场景使用)
如果你确实需要生成可以直接调用的独立变量,可以通过Python内置的globals()(全局作用域)或locals()(局部作用域)字典直接赋值,注意局部作用域下修改locals()在部分Python解释器实现中可能不生效,优先使用globals()。
示例代码:time = "0915" # 直接在全局作用域生成x_0915变量 globals()[f"x_{time}"] = "some value" # 可以直接调用该变量 print(x_0915) # 输出:some value注意:这种方式会直接修改当前作用域的变量表,很容易意外覆盖同名的已有变量,后续排查问题成本很高,除非你非常清楚当前作用域的所有变量命名,否则不要用这个方案。
内容的提问来源于stack exchange,提问作者Sachin Kumar
相关产品推荐
相关产品推荐

