python导入多次

时间:2016-05-06 08:10:56

标签: python import python-3.4

我想这是一个普遍的问题,如果没有张贴在正确的地方,我很抱歉。

比方说,我有一个导入a的函数os。如果我要多次从另一个文件调用此函数,我假设导入也会多次执行?有没有办法只导入模块,如果它还没有出现?

基本上,我有一个类调用从各种文件导入的多个函数,而不是导入整个文件我以为它更容易导入函数但现在我想知道我是否会让自己头疼长期以来进口过剩。

1 个答案:

答案 0 :(得分:18)

在python文档中作为described,当python看到一些import语句时,它会执行以下操作:

  • 检查某个全局表是否已导入模块
    • 如果未导入模块,则python导入它,创建模块对象并将新创建的模块对象放入全局表中
    • 如果导入模块,则python只获取模块对象
  • 当python有模块对象时,它会将它绑定到您选择的名称
    • 如果模块import foo的{​​{1}}名称为foo
    • 如果模块foo的{​​{1}}名称为import foo as bar
    • 如果是foo python在模块bar中找到函数(或其他)from foo import bar as baz并将此函数绑定到名称bar

所以每个模块只导入一次。

为了更好地理解导入机制,我建议创建玩具示例。

档案foo

baz

档案module.py

print("import is in progress")

def foo():
    pass

将上述文件放在同一目录中。导入main.py时,会打印def foo(): print("before importing module") import module module.foo() print("after importing module") if __name__ == '__main__': foo() foo() 。当您启动module.py时,它会尝试多次导入import is in progress,但输出将为:

main.py

因此导入只发生一次。您可以调整此玩具示例以检查您感兴趣的案例。