需求:生成多个变量名并赋值
方法:exec/命名空间
1.exec
直接上代码:
lis = ['a', 'b', 'c'] for x in lis: exec("args_{} = {}".format(x, x)) exec('print(args_a)')
你以为这样就可以打印出args_a这个变量:a吗,当然不可以:
Traceback (most recent call last): File "E:/test/testuse.py", line 3, inexec("args_{} = {}".format(x, x)) File " ", line 1, in NameError: name 'a' is not defined
报错:动态变量赋值的’a’没有被定义,所以失败了,但是’a’已经是一个字符了,不会存在仍然未定义的情况:
这是因为,赋值只能是int类型
exec("args_{} = {}".format("a", 123)) exec('print(args_a)') exec('print(type(args_a))') # 123 #
即使我们把123修改为str
exec("args_{} = {}".format("a", "123")) exec('print(args_a)') exec('print(type(args_a))') # 123 #
exec还有一个很大的弊端,生成的动态变量无法被调用,基本上就只能print一下,太鸡肋了
2.命名空间
在 Python 的命名空间中,将变量名与值存储在字典中,通过 locals()/globals() 函数分别获取局部命名空间/全局命名空间
args = locals() lis = ['a', 'b', 'c'] for x in lis: args["args_{}".format(x)] = x print(args["args_a"]) #a
而且他生成的动态变量还可以被调用:
news = args["args_a"]+args["args_b"] print(news) #ab
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)