Python如何使用变量值作为新变量名实现类似PHP可变变量的功能?
Python完全可以实现你需要的可变变量功能,下面是具体实现方案:
方案1:操作全局/局部命名空间字典
Python的作用域本质是字典结构,globals()会返回当前全局作用域的变量字典,直接修改该字典即可动态创建变量,和PHP的可变变量效果完全一致:
from random import randint # 存储要创建的变量名 x = "myint" # 将x的取值作为变量名,赋值为randint函数 globals()[x] = randint # 测试效果 print(type(myint)) # 输出:<class 'builtin_function_or_method'> # 正常调用该动态变量 new_int = myint(0, 50) print(new_int)
如果是在函数内部创建局部动态变量,把globals()替换为locals()即可。
还有一种通过exec执行动态字符串的写法:exec(f"{x} = randint"),但这种写法存在代码注入风险,不推荐生产环境使用。
方案2:自定义字典存储动态变量(更推荐)
直接修改全局命名空间容易出现变量名冲突,更稳妥的方式是单独维护一个字典存储所有动态变量,不需要污染全局作用域:
from random import randint # 自定义字典存储动态变量 dynamic_vars = {} x = "myint" dynamic_vars[x] = randint # 调用方式 print(type(dynamic_vars["myint"])) new_int = dynamic_vars["myint"](0, 50)
这种方式后续批量管理、删除动态变量都更方便,也不会覆盖已有的全局变量,实际开发优先选这个方案。
注意:如果赋值时写
randint()(带括号),会把函数执行后的整数结果赋值给动态变量,就无法后续调用该变量生成新的随机数,要按需选择是否加括号。
内容的提问来源于stack exchange,提问作者Luxgeek
相关产品推荐
相关产品推荐

