試圖尋找該網站,但無法找到一個答案,我的問題:分級命名空間
可以說我有一個模塊,名爲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中,它似乎工作正常。我已經更新了我的答案以反映這一點。 –