猿问

如何将局部变量转换为全局变量,python?

我创建了一个函数,该函数将 python 中的模块作为您想要的名称导入。我只想知道,如何在全局范围内访问这个新的局部变量。


def myimport(modulename, newname):

    exec('%s = __import__("%s")'%(newname, modulename))


myimport('os', 'pax')

现在无法在函数外部访问pax变量,我希望它可以访问。


BIG阳
浏览 835回答 2
2回答

莫回无

这个答案仅用于研究目的,正如 Willem Van Onsem 在评论部分所述 - 由于可能引发的安全问题,通过 eval / exec 等导入在生产代码中并不重要。以下代码适用于 python 2 和 python 3。诀窍是使用 global() 函数将导入的模块绑定到全局变量:def myimport(modulename):    module = eval('__import__("%s")' % (modulename))    globals()[modulename] = modulemyimport('os')print(os.path) # now os can get used ...更新以下代码在没有这个丑陋的 eval 语句的情况下工作:def myImport(modulename):    globals()[modulename] = __import__(modulename)myImport("sys")print(sys.path)

慕码人2483693

您可以将 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 的方法。
随时随地看视频慕课网APP

相关分类

Python
我要回答