python导入模块以全局工作
我在尝试让python接受“全局”导入时遇到问题 在一个模块中,它需要根据另一个变量导入另一个模块,但如果我在start函数中有它,它似乎不会将它导入所有模块函数中;例如:python导入模块以全局工作,python,import,module,Python,Import,Module,我在尝试让python接受“全局”导入时遇到问题 在一个模块中,它需要根据另一个变量导入另一个模块,但如果我在start函数中有它,它似乎不会将它导入所有模块函数中;例如: def start(): selected = "web" exec("from gui import " + selected + " as ui") log("going to start gui " + selected) ui.start() 这在同一模块中起作用: def clos
def start():
selected = "web"
exec("from gui import " + selected + " as ui")
log("going to start gui " + selected)
ui.start()
这在同一模块中起作用:
def close():
ui.stop()
不起作用。我不知道这里发生了什么
Joe您可以在中使用提供的范围。试试这个:
exec("from gui import " + selected + " as ui") in globals()
您可以在
中使用提供的范围。试试这个:
exec("from gui import " + selected + " as ui") in globals()
您正在将ui模块仅导入start()函数作用域。您应该将模块导入全局范围。为此,可以在两个函数(start和close)之前导入模块,或者为exec()函数提供全局作用域
示例:为exec方法提供全局范围
exec("from gui import " + selected + " as ui") in globals()
您正在将ui模块仅导入start()函数作用域。您应该将模块导入全局范围。为此,可以在两个函数(start和close)之前导入模块,或者为exec()函数提供全局作用域
示例:为exec方法提供全局范围
exec("from gui import " + selected + " as ui") in globals()
你为什么要这样做?为什么不使用内置的\uuuuu导入\uuuuuu
?另外,您对gui
的绑定是函数start
的本地绑定,为什么要这样做?为什么不使用内置的\uuuuu导入\uuuuuu
?此外,您对gui
的绑定是函数start
的本地绑定,有(更多)更好的方法动态选择要导入的模块。检查过去的问题,如果你感兴趣,可以问一个新问题。作为改进方法的一个副作用,您也不会遇到您在这里看到的问题。对不起,我选择了这种方法,它对我来说非常有效。无论如何,谢谢你,说真的。不要使用exec
。几乎从来没有一个好的理由。如果必须从动态名称导入(这有点代码味道),请查看\uuuu import\uuuu
函数,例如:global ui
…ui=\uu import\uuu(选中)
。这是一种可怕的导入方式。在未来的某个时刻,它要么会猛烈地崩溃,要么会失控。好吧,各位。。我将改变它:这里有(更多)更好的方法来动态选择要导入的模块。检查过去的问题,如果你感兴趣,可以问一个新问题。作为改进方法的一个副作用,您也不会遇到您在这里看到的问题。对不起,我选择了这种方法,它对我来说非常有效。无论如何,谢谢你,说真的。不要使用exec
。几乎从来没有一个好的理由。如果必须从动态名称导入(这有点代码味道),请查看\uuuu import\uuuu
函数,例如:global ui
…ui=\uu import\uuu(选中)
。这是一种可怕的导入方式。在未来的某个时刻,它要么会猛烈地崩溃,要么会失控。好吧,各位。。我来换一下:Dthnx。你得到了同样的答案,但我不得不从中挑选一个你做了正确的选择。Imram编写的消息之前已发送。=]thnx。你得到了同样的答案,但我不得不从中挑选一个你做了正确的选择。Imram编写的消息之前已发送。=]如果“selected”是子模块,则此操作不起作用。为此,请首先执行“\uuuu导入”\uuuu('ui.+selected')。如果“selected”是子模块,则此操作不起作用。为此,请首先执行“\uuuu导入”\uuuuu('ui.+selected')。
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()