0
点赞
收藏
分享

微信扫一扫

python小点心--globals函数


          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




举报

相关推荐

0 条评论