首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

请问:exec code in module.dict_ ,怎么理解

2013-09-25 
请教:exec code in module.__dict__ ,如何理解?本帖最后由 seai 于 2013-09-10 00:19:35 编辑import newde

请教:exec code in module.__dict__ ,如何理解?
本帖最后由 seai 于 2013-09-10 00:19:35 编辑

import new
def importCode(code, name, add_to_sys_modules=False):
  module=new.module(name)
  if add_to_sys_modules:
    import sys
    sys.modules[name]=module
  exec code in module.__dict__   #这句真心没看懂,=={'__name__': 'foo', '__doc__': None}
  return module
  

foofile=open("test.py")
foo=importCode(foofile,"foo",1)
foo.aaa


#test.py
aaa=123
print 123

[解决办法]
exec后可接名字空间,默认情况下: exec code in globals(),loclas(),看如下代码:
In [19]: a=123

In [20]: exec 'print a' in  globals(),locals()
123

[解决办法]
没有的话默认就是全局(globals())的名称空间,你可以定义自己的名称空间:
如:
1.
In [21]: a=321

In [22]: exec 'print a' in  {},{}
---------------------------------------
NameError                                 Traceback (most recent call last)

C:\Users\yxlink\<ipython console> in <module>()

C:\Users\yxlink\<string> in <module>()

NameError: name 'a' is not defined

2.
In [23]: a=321

In [24]: exec 'print a' in  {'a':789},{}
789


[解决办法]
其实这就是Python的变量查找了,在python中,变量查找遵循LGB原则,即优先在局部作用域(local scope)中对变量进行查找,失败则在全局作用域(global scope)中进行查找,最后尝试再内建作用域(build-in scope)内查找。
看下代码:
a=123
b=789
print globals()
print locals()

输出:
{'a': 123, 'b': 789, '__builtins__': <module '__builtin__' (built-in)>, '__file__': 'cs.py', '__name__': '__main__', '__doc__': None} 


{'a': 123, 'b': 789, '__builtins__': <module '__builtin__' (built-in)>, '__file__': 'cs.py', '__name__': '__main__', '__doc__': None}



In [34]: exec 'print a' in {'a':123},{'a':789}
789


应该明白了吧!!!

热点排行