刚学python不久,最近用python编写公司服务器的一个备份脚本,期间遇到动态变量的问题,然后各种baidu,google。终于发现了两个重要的变量locals()和globals()。
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> a=1
>>> b={}
>>> locals()
{'a': 1, 'b': {}, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}
>>> def func():
... print "func_locals(): %s" % locals()
...
>>> func()
func_locals(): {}
从以上代码我们发现locals()其实就是一个为dict类型的变量,每当我们增加了一个变量之后,locals()就会增加一个key和对应的value,大家一定发现了通过def定义的函数返回的locals()是一个空的dict,也就是说,locals()中保存的变量只是作用在本地域,无法去动态定义全局变量,这时就轮到globals()上场了,使用的方法和locals()一样。
>>> def func2():
... names=globals()
... print "func_globals(): %s" % globals()
...
>>> func2()
func_globals(): {'a': 1, 'func2': <function func2 at 0x7f71fb69f668>, 'b': {}, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'func': <function func at 0x7f71fb69f5f0>, '__name__': '__main__', '__doc__': None}
>>> locals()
{'a': 1, 'func2': <function func2 at 0x7f71fb69f668>, 'b': {}, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'func': <function func at 0x7f71fb69f5f0>, '__name__': '__main__', '__doc__': None}
看到效果了吗?下面是一个动态变量赋值的下例子
>>> names = locals()
>>> for i in xrange(1, 101):
... names['x%s' % i] = i
...
>>> x1
1
>>> x2
2
>>> x100
100