37,719
社区成员
发帖
与我相关
我的任务
分享
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
b={'b':789}
c={'c':456}
exec 'a=123\nprint a' in b,c
print b,c
总之还是没太看懂。
是先执行exec语句,然后将变量更新到in所指dict中呢,更新的规则是怎样的?
还是先取出dict中的值,应用到exec语句中,取出应用的规则是怎样的?import new
module=new.module('foo')
exec 'a=123\nprint a'
print module.__dict__
#{'__name__': 'foo', '__doc__': None}
exec 'a=123\nprint a' in module.__dict__
print module.__dict__
#{'__name__': 'foo', '__doc__': None, 'a': 123}
b={}
exec 'a=123\nprint a' in b
print b
#{'a': 123}
看起来是将exec执行后的代码空间中的所有变量,插入到了in所指的dict中。
不知理解是否正确。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
a1=123
exec 'a1=234\nprint a1'
print a1 #234
In [19]: a=123
In [20]: exec 'print a' in globals(),locals()
123
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
应该明白了吧!!!