试图寻找该网站,但无法找到一个答案,我的问题:分级命名空间
可以说我有一个模块,名为mymodule.py包含:
def a():
return 3
def b():
return 4 + a()
然后以下作品:
import mymodule
print(mymodule.b())
然而,当我尝试动态定义模块内容:
import imp
my_code = '''
def a():
return 3
def b():
return 4 + a()
'''
mymodule = imp.new_module('mymodule')
exec(my_code, globals(), mymodule.__dict__)
print(mymodule.b())
然后失败的函数B():
Traceback (most recent call last):
File "", line 13, in <module>
File "", line 6, in b
NameError: global name 'a' is not defined
我需要一种方法来保存分级名字空间模块搜索,这似乎除非模块驻留在磁盘发生故障。
任何线索至于有什么区别?
谢谢, Rob。
是否有一个python 3.x版本的“exec ... in”? 似乎无法在exec()函数中找到它。 谢谢 – rbairos
它看起来不像它...看到我的更新,'不太漂亮'的版本应该在3.x中为你工作(我还没试过,所以让我知道它是否有效) –
好吧,我测试过'exec(my_code,mymodule .__ dict__,mymodule。__dict __)'在python3中,它似乎工作正常。我已经更新了我的答案以反映这一点。 –