Suppose I have a Python module "main.py":
import math # from the standard Python library
import my_own_module
...
foo = math.cos(bar)
And I also need to import the standard math module in "my_own_module.py":
import math
...
baz = math.sin(qux)
In this case I think import math
in "main.py" is redundant and can be omitted.
What's best practice in this case:
import math
from "main.py" becuase it's redundant? Or, import math
in "main.py" to clarify that the code in that module requires it? The reference to math.cos
in main.py
means that import math
is required in main.py
, regardless of whether my_own_module.py
imports it or not. It is not redundant, and it cannot be omitted (and if you try to omit it, you'll get an error).
import math
does something else than simply including the full text of one file into the other .
It introduces a new namespace with the name math
, and this math
name will be known in your current namespace .
If you omit the
import math
from your main.py
file, your command
foo = math.cos(bar)
becomes illegal , as the math
symbol will be not (recognized) in the main.py
namespace.
This is not like, eg #include
in C++. The import is not optional. Importing a module is required to be able to refer to its contents. This is true for every single file that does it.
A good question. The short answer is yes, if you use a math function in a py file then you need to import the module at the top regardless of how many times its imported elsewhere.
It gets interesting when we throw a thrid file into the mix, lets call this "explanation.py"
And lets suppose that your "main.py" becomes "my_functions.py" and contains a function called foo:
#my_functions.py
import math
import my_own_module
def foo(bar):
return math.cos(bar)
and in my_own_module.py:
#my_own_module.py
import math
def bar(foo):
return math.sin(foo)
and finally explanation.py (new main())
#main.py
import my_functions
import my_own_module
bar = my_functions.foo(10)
foo = my_own_module.bar(10)
print(foo)
print(bar)
Notice how you DO NOT need to add math if you call the functions imported from another file. I hope that might add further clarity to your enquiry :)
However it might be worth noting that this would exclude maths from the current namespace, therefore rendering any further calls to the math functions useless.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.