python3中动态变量设置实例,python3实例,我是初学。在python
python3中动态变量设置实例,python3实例,我是初学。在python
我是初学。在python3中,使用
for i in range(3): locals()['part' + str(i)] = iprint(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没有被定义呢?
先看一段代码
print locals'''输出的是{'__builtins__': <module '__builtin__' (built-in)>, '__name__':'__main__', '__doc__': None, '__package__': None}'''a = 1print locals()'''输出是{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'a': 1, '__package__': None}注意:多了一个'a':1'''def b(): print locals()b()'''输出是{}'''def b(): c = 1 print locals()b()'''输出是{'c':1}'''
至此你应该明白locals实际上是表示当前作用域的含义。
那么再来执行一段代码
print locals()locals()['test'] = 1print locals()print test
输出是:
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'test': 1, '__doc__': None, '__package__': None}1
这时候就动态的增加了变量test。但是注意,这里是在最外层,也就是全局作用域下利用locals()增加了变量定义。
那么为什么在你的代码中,通过locals()动态增加变量会报错呢?
注意:这里搜索局部名字空间并不是搜索locals(),因此在局部空间的locals()中添加变量并不会被python搜索到。实际上在在局部作用域下,locals是一个可读函数来输出该局部作用域下定义的变量,python内部并没有读locals()来寻找变量名,而且通过locals来更改变量值也是不可行的,代码如下
def a(): b = 1 locals()['b'] = 2 print ba() #输出为1
至此,解释了为什么在你的代码中会报part0未定义的错误了。
那么,怎样才可以动态增加变量呢?可以通过globals()['new_var']来增加,但是注意,这里增加的全局变量,慎用啊。代码如下:
def a(): for i in range(3): globals()['part' + str(i)] = i print part0 print part1 print part2a()print part0'''输出为:0120'''
至于如何动态局部作用域下增加变量,这个我还真不清楚,不过你可以变通一下,定义一个字典变量,然后赋值给它就好了嘛,代码如下:
def a(): b = {} for i in range(3): b['part' + str(i)] = i print b['part0'] print b['part1'] print b['part2']a()'''输出为:012'''
默认的情况下下,globals()是可以直接用dict来操作的,但是locals()并不一样,可以先认为locals()是一个只读的dict(或者是没有写回作用的dict),只能知道你当前的代码的局部变量,但是无法通过修改locals() 使之生效
如果用exec在执行代码时,指定一个dict作为这这段代码的locals,是可以修改的
编橙之家文章,
相关内容
- django get请求超时提示,换其它页面就正常是什么原因,
- Python如何得到存在Request内c的ookies,pythonookies,如图所示
- Python 3.X 报出 'utf-8' codec can't decode byte invalid start,pyt
- Python类NameError出现原因,python类nameerror,报的错如下:
- 国外IP用VPN访问YouTube网页显示中文正常吗?,vpnyoutube,使
- Python能查到被导入而没有引用的类库吗,python类库,例:
- 易信公众帐号获取用户基本信息是通过什么方式,易信
- 求教sqlalchemy模糊查询正确使用方法,sqlalchemy模糊查询
- 想要在flask数据库中修改指定用户的角色,要如何操作
- Python manage.py db upgrade语句使用问题,manage.pyupgrade,最近
评论关闭