2 回答

TA貢獻1865條經(jīng)驗 獲得超7個贊
這個答案僅用于研究目的,正如 Willem Van Onsem 在評論部分所述 - 由于可能引發(fā)的安全問題,通過 eval / exec 等導入在生產(chǎn)代碼中并不重要。以下代碼適用于 python 2 和 python 3。訣竅是使用 global() 函數(shù)將導入的模塊綁定到全局變量:
def myimport(modulename):
module = eval('__import__("%s")' % (modulename))
globals()[modulename] = module
myimport('os')
print(os.path) # now os can get used ...
更新
以下代碼在沒有這個丑陋的 eval 語句的情況下工作:
def myImport(modulename):
globals()[modulename] = __import__(modulename)
myImport("sys")
print(sys.path)

TA貢獻1860條經(jīng)驗 獲得超9個贊
您可以將 globals 字典作為第二個參數(shù)傳遞給exec. 這將改變 exec 的代碼執(zhí)行范圍。
def very_bad_idea(name, value):
exec(f'{name}={repr(value)}', globals())
very_bad_idea('spam', 'eggs')
print(spam) # prints 'eggs'
但請不要這樣做。嘗試找到一些不涉及 exec 的方法。
添加回答
舉報