python import multiple times

后端 未结 1 1967
闹比i
闹比i 2020-12-01 16:12

I suppose this is a general question so sorry if not posted in the right place.

Say for instance, I have a function a which imports os. If

相关标签:
1条回答
  • 2020-12-01 16:53

    As described in python documentation, when python see some import statement it does the following things:

    • checks some global table if module is already imported
      • if module is not imported python imports it, creates module object and puts newly created module object to the global table
      • if module is imported python just gets module object
    • when python has module object it binds it to the name you chose
      • if it was import foo name for module foo will be foo
      • if it was import foo as bar name for module foo will be bar
      • if it was from foo import bar as baz python finds function (or whatever) bar in module foo and will bind this function to name baz

    So each module is imported only one time.

    To better understand import mechanics I would suggest to create toy example.

    File module.py:

    print("import is in progress")
    
    def foo():
        pass
    

    File main.py:

    def foo():
        print("before importing module")
        import module
        module.foo()
        print("after importing module")
    
    if __name__ == '__main__':
        foo()
        foo()
    

    Put above files to the same directory. When module.py is being imported it prints import is in progress. When you launch main.py it will try to import module several times but the output will be:

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

    So import really happens only once. You can adjust this toy example to check cases that are interesting to you.

    0 讨论(0)
提交回复
热议问题