如何将字符串常量转为变量?
- 意义
问题的字面意思就是,如何动态生成变量名。比如: a = [“A”, “B”, “C”] ,可否将"A" = [……]呢?
如果可以,就不用做预先定义,少了给变量取名的麻烦,还实现了自动编码。 AI就可以通过已知条件,动态生成变量名。 - 实现方式
#方法一
a = ["A", "B", "C"]
for i in a:
globals()[i] = []
##定义了 A =[]/B=[]/C=[]
#方法二
a = ["A", "B", "C"]
for i in a:
exec(f"{i} = []")
##同样定义了 A =[]/B=[]/C=[]
- 附加信息
1、对于第一个方法,先得了解globals()是全局命名空间字典,比如x是定义的一个变量,内容是3,那么"x" : 3就是globals里的一个键值对,详见
所以globals()[“A”] = [] ,按照如下方式进行查找赋值
-
局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x, 或一个参数 x,Python 将使用它,然后停止搜索。
-
全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
-
内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。
最后以假定"A"为变量名的方式定义变量,并赋值
2、对于第二个方法,因为exec是内置的,用来执行储存在字符串或文件中的代码段,如exec(“x = 1 + 2”),则x == 3。所以执行格式化字符串,串中包含变量名即可
- 知识来源
Python猫公众号`
`