Python中如何通过函数参数动态设置变量名?
Python函数内动态生成变量名的解决方案
问题原因
- 全局作用域下调用
vars()实际返回的是全局命名空间字典globals(),修改这个字典会直接新增/修改全局变量,所以你在函数外的代码能正常运行。 - 函数局部作用域下的
vars()返回的是本地变量的只读映射,对它做赋值操作不会实际生效,所以你在函数内加的键没有真的生成本地变量,调用print(test)就会报未定义的错误。
可行解决方案
方案1:操作全局命名空间(适合需要生成全局变量的场景)
直接修改globals()字典即可实现函数内动态创建全局变量,代码如下:
def func(name): globals()[str(name)] = 2 print(test) func("test")
运行后会输出2,符合预期效果。
注意:该方案会修改全局命名空间,传入的
name参数如果和已有全局变量重名会直接覆盖原有变量,仅适合少量、确认不会出现命名冲突的场景使用。
方案2:用字典存储动态键值对(更推荐的通用方案)
99%的动态变量需求都不需要真的创建独立变量,用自定义字典存储动态键值对是Python社区公认的最佳实践,完全避免命名冲突、逻辑更清晰,代码如下:
def func(name): # 用自定义字典存储所有动态生成的键值 dynamic_container = {} dynamic_container[str(name)] = 2 # 取值时通过字典键名访问即可 print(dynamic_container["test"]) # 需要外部使用就返回这个字典 return dynamic_container res = func("test") # 外部也可以正常取值 print(res["test"])
运行后函数内和外部调用都会输出2,满足同等使用需求。
内容的提问来源于stack exchange,提问作者Mixnik
相关产品推荐
相关产品推荐

