为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

BIG阳 2021-08-14 19:37:22
我创建了一个函数,该函数将 python 中的模块作为您想要的名称导入。我只想知道,如何在全局范围内访问这个新的局部变量。def myimport(modulename, newname):    exec('%s = __import__("%s")'%(newname, modulename))myimport('os', 'pax')现在无法在函数外部访问pax变量,我希望它可以访问。
查看完整描述

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)


查看完整回答
反对 回复 2021-08-14
?
慕码人2483693

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 的方法。


查看完整回答
反对 回复 2021-08-14
  • 2 回答
  • 0 关注
  • 834 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信