请教: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
In [19]: a=123
In [20]: exec 'print a' in globals(),locals()
123
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
In [23]: a=321
In [24]: exec 'print a' in {'a':789},{}
789
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