Python 导入模块以全局使用

1 投票
4 回答
4659 浏览
提问于 2025-04-15 17:33

我遇到了一个问题,想让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()

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答