我想这是一个普遍的问题,如果没有张贴在正确的地方,我很抱歉。
比方说,我有一个导入a
的函数os
。如果我要多次从另一个文件调用此函数,我假设导入也会多次执行?有没有办法只导入模块,如果它还没有出现?
基本上,我有一个类调用从各种文件导入的多个函数,而不是导入整个文件我以为它更容易导入函数但现在我想知道我是否会让自己头疼长期以来进口过剩。
答案 0 :(得分:18)
在python文档中作为described,当python看到一些import语句时,它会执行以下操作:
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
因此导入只发生一次。您可以调整此玩具示例以检查您感兴趣的案例。