我是初学。在python3中,使用
for i in range(3):
locals()['part' + str(i)] = i
print(part0)
print(part1)
print(part2)
能够得到三个动态生成的变量part0,part1和part2
但是把上面代码包含到一个函数中
def Main():
for i in range(3):
locals()['part'+str(i)] = i
print(part0)
print(part1)
print(part2)
Main()
却会报错,说变量part0没有被定义呢?
先看一段代码
至此你应该明白locals实际上是表示当前作用域的含义。
那么再来执行一段代码
输出是:
这时候就动态的增加了变量
test
。但是注意,这里是在最外层,也就是全局作用域下利用locals()增加了变量定义。那么为什么在你的代码中,通过locals()动态增加变量会报错呢?
注意:这里搜索局部名字空间并不是搜索locals(),因此在局部空间的locals()中添加变量并不会被python搜索到。实际上在在局部作用域下,locals是一个可读函数来输出该局部作用域下定义的变量,python内部并没有读locals()来寻找变量名,而且通过locals来更改变量值也是不可行的,代码如下
至此,解释了为什么在你的代码中会报
part0
未定义的错误了。那么,怎样才可以动态增加变量呢?可以通过globals()['new_var']来增加,但是注意,这里增加的全局变量,慎用啊。代码如下:
至于如何动态局部作用域下增加变量,这个我还真不清楚,不过你可以变通一下,定义一个字典变量,然后赋值给它就好了嘛,代码如下: