python小点心--globals函数
  o1BAHjbPsZGS 2023年11月02日 36 0


          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




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  YgmmQQ65rPv4   2023年11月19日   30   0   0 Java应用程序
  Y8XIq1u6ceQW   2023年11月19日   43   0   0 Java
  AeUHztwqqxTz   2023年11月02日   44   0   0 Javatomcatapache
  qdH5JHSHCtBs   2023年11月02日   77   0   0 Javadns cache
o1BAHjbPsZGS
作者其他文章 更多
最新推荐 更多