我创建了一个函数,该函数将python中的模块作为您想要的名称导入。我只想知道如何在全局范围内访问此新局部变量。
def myimport(modulename, newname):
exec('%s = __import__("%s")'%(newname, modulename))
myimport('os', 'pax')
现在 pax 变量无法在函数外部访问,我希望可以访问它。
答案 0 :(得分:1)
正如威廉姆·范·昂塞姆(Willem Van Onsem)在评论部分中所述,此答案仅用于研究目的-由于可能会引发安全性问题,因此通过eval / exec等导入在生产性代码中并不重要。以下代码适用于python 2和python3。技巧是使用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)
答案 1 :(得分:0)
您可以将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的方式。