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 I was to call this function from another file multiple times I am assuming that the import would be done multiple times as well? Is there a way to only import the module if its not already present?
Basically, I have a class which calls multiple functions imported from various files, instead of importing the whole file I thought it would be easier to import just the function but now I am wondering if I am going to give myself headaches in the long run with excess imports.
As described in the python documentation, when python see some import statement it does the following things:
import foo
, the name for the module foo
will be foo
import foo as bar
, the name for the module foo
will be bar
from foo import bar as baz
, python finds the function (or whatever) bar
in module foo
and will bind this function to the name baz
So each module is imported only one time.
To better understand import mechanics, I would suggest creating a 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 the above files in 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.