2 回答
TA贡献1865条经验 获得超7个赞
这个答案仅用于研究目的,正如 Willem Van Onsem 在评论部分所述 - 由于可能引发的安全问题,通过 eval / exec 等导入在生产代码中并不重要。以下代码适用于 python 2 和 python 3。诀窍是使用 global() 函数将导入的模块绑定到全局变量:
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条经验 获得超9个赞
您可以将 globals 字典作为第二个参数传递给exec. 这将改变 exec 的代码执行范围。
def very_bad_idea(name, value):
exec(f'{name}={repr(value)}', globals())
very_bad_idea('spam', 'eggs')
print(spam) # prints 'eggs'
但请不要这样做。尝试找到一些不涉及 exec 的方法。
添加回答
举报