Python 导入模块以全局使用
我遇到了一个问题,想让Python在全局范围内接受一个导入。
在一个模块中,它需要根据另一个变量导入另一个模块,但如果我把导入放在开始的函数里,它似乎并没有在所有模块的函数中都有效;比如说:
def start():
selected = "web"
exec("from gui import " + selected + " as ui")
log("going to start gui " + selected)
ui.start()
这个方法可以用,但在同一个模块里:
def close():
ui.stop()
就不行。我不知道这是怎么回事。
乔
4 个回答
0
你现在只是在start()这个函数里面引入了ui模块。其实应该把这个模块引入到全局,这样在其他地方也能用。你可以在两个函数(start和close)之前引入这个模块,或者给exec()函数提供全局作用域。
举个例子:如何给exec方法提供全局作用域。
exec("from gui import " + selected + " as ui") in globals()
2
你为什么想这样做呢?为什么不直接用内置的 __import__
呢?另外,你把 gui
绑定在函数 start
里面,这样它只在这个函数里有效。
8
import gui
ui = None
def start():
selected = "web"
log("going to start gui " + selected)
global ui
__import__("gui.%s" % selected) # if you're importing a submodule that
# may not have been imported yet
ui = getattr(gui, selected)
ui.start()
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。