小编典典

python多次导入

python

我想这是一个普遍的问题,如果不能在正确的位置发布,抱歉。

比如说,我有一个aimport的函数os。如果我要多次从另一个文件调用此函数,我是否假设导入也将多次进行?有没有办法仅在模块不存在时才导入?

基本上,我有一个类,它调用从各个文件导入的多个函数,而不是导入整个文件,我认为仅导入该函数会更容易,但是现在我想知道从长远来看是否会令自己头痛进口过多。


阅读 225

收藏
2020-12-20

共1个答案

小编典典

正如描述的蟒蛇文档中,当蟒蛇看到它下面的一些事情的import语句:

  • 检查一些全局表(如果模块已经导入)
    • 如果未导入模块,python将其导入,创建模块对象,并将新创建的模块对象放入全局表
    • 如果模块是导入的python只是获取模块对象
  • 当python有模块对象时,它将其绑定到您选择的名称
    • 如果它是import foo模块的名称foo将是foo
    • 如果它是import foo as bar模块的名称foo将是bar
    • 如果是from foo import bar as bazpython ,则bar在模块中查找函数(或其他函数)foo并将该函数绑定到namebaz

因此,每个模块仅导入一次。

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

档案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,它将尝试module多次导入,但输出将是:

before importing module
import is in progress
after importing module
before importing module
after importing module

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

2020-12-20