globals函数提供了基于字典的访问全局变量的功能,如果理解这个函数的功能,先从最简单的情况开始
#coding=utf-8
'''
Created on 2016-1-11
@author: Administrator
'''
print globals()
这个脚本中,只有一行代码,就是打印global()函数的返回值,输出内容如下
<pre name="code" class="html">{'__builtins__': <module '__builtin__' (built-in)>,
'__name__': '__main__',
'__file__': 'E:\\javaSrc\\MyPython\\Test\\testGlobals3.py',
'__doc__': '\nCreated on 2016-1-11\n\n@author: Administrator\n',
'__package__': None
}
可以清楚的看到,返回值是一个字典,字典里的内容除了第一个意外,都很容易理解,__builtins__是对内建模块__builtin__的引用,__name__的值为__main__,想想平时经常使用的if __name__ == '__main__':你就明白这个字段的意义了。__file__是该脚本的目录,__doc__是最上面的注释,__package__是指包名
现在,进入第二阶段
#coding=utf-8
'''
Created on 2016-1-11
@author: Administrator
'''
name = 'apple'
price = 100
print globals()
打印内容为
{
'name': 'apple',
'__builtins__': <module '__builtin__' (built-in)>,
'__file__': 'E:\\javaSrc\\MyPython\\Test\\testGlobals3.py',
'__package__': None,
'price': 100,
'__name__': '__main__',
'__doc__': '\nCreated on 2016-1-11\n\n@author: Administrator\n'
}
现在,字典里多了两个键值对,正是刚刚添加的name,和price
OK,进入第三阶段
#coding=utf-8
'''
Created on 2016-1-11
@author: Administrator
'''
name = 'apple'
price = 100
def testGlobals():
print 'test globals'
fvars = globals()
print fvars
fvars['testGlobals']()
这次,模块内增加了一个函数,最终的输出内容为
{
'testGlobals': <function testGlobals at 0x00000000024D3A58>,
'name': 'apple',
'__builtins__': <module '__builtin__' (built-in)>,
'fvars': {...},
'__file__': 'E:\\javaSrc\\MyPython\\Test\\testGlobals3.py',
'__package__': None,
'price': 100,
'__name__': '__main__',
'__doc__': '\nCreated on 2016-1-11\n\n@author: Administrator\n'
}
字典里又新增了两个键值对,testGlobals是新增加的函数,而且,可以直接通过fvars['testGlobals']()来调用该函数,fvars是一个变量
最后一个阶段,新增加一个类
#coding=utf-8
'''
Created on 2016-1-11
@author: Administrator
'''
name = 'apple'
price = 100
class hello:
def GET(self, name):
return "Hello %s!\n" % name
def testGlobals():
print 'test globals'
fvars = globals()
print fvars
fvars['testGlobals']()
klass = fvars.get('hello')
if hasattr(klass, 'GET'):
func = getattr(klass, 'GET')
print func(klass(), ('kwsy',))
输出内容为
{
'testGlobals': <function testGlobals at 0x0000000002493A58>,
'name': 'apple',
'__builtins__': <module '__builtin__' (built-in)>,
'fvars': {...},
'__file__': 'E:\\javaSrc\\MyPython\\Test\\testGlobals3.py',
'hello': <class __main__.hello at 0x0000000002525FA8>,
'__package__': None,
'price': 100,
'__name__': '__main__',
'__doc__': '\nCreated on 2016-1-11\n\n@author: Administrator\n'
}
字典里多了一个 ‘hello’ 关键字,它的值正是类hello
globals返回的字典是可以修改的,其修改会真实的产生影响
#coding=utf-8
'''
Created on 2016-1-11
@author: Administrator
'''
name = 'apple'
price = 100
fvars = globals()
fvars['price'] = 101
print price
最后的打印结果将是101