In Python, what exactly does import *
import? Does it import __init__.py
found in the containing folder?
For example, is it necessary to declare from project.model import __init__
, or is from project.model import *
sufficient?
In Python, you use the import keyword to make code in one module available in another. Imports in Python are important for structuring your code effectively. Using imports properly will make you more productive, allowing you to reuse code while keeping your projects maintainable.
It just means that you import all(methods, variables,...) in a way so you don't need to prefix them when using them.
Artturi Jalli. The difference between import and from import in Python is: import imports the whole library. from import imports a specific member or members of the library.
If there is no such variable, it imports everything.
The "advantage" of from xyz import *
as opposed to other forms of import is that it imports everything (well, almost... [see (a) below] everything) from the designated module under the current module. This allows using the various objects (variables, classes, methods...) from the imported module without prefixing them with the module's name. For example
>>> from math import * >>>pi 3.141592653589793 >>>sin(pi/2) >>>1.0
This practice (of importing * into the current namespace) is however discouraged because it
Typically we therefore limit this import * practice to ad-hoc tests and the like. As pointed out by @Denilson-Sá-Maia, some libraries such as (e.g. pygame) have a sub-module where all the most commonly used constants and functions are defined and such sub-modules are effectively designed to be imported with import *
. Other than with these special sub-modules, it is otherwise preferable to ...:
explicitly import a few objects only
>>>from math import pi >>>pi >>>3.141592653589793 >>> sin(pi/2) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'sin' is not defined
or import the module under its own namespace (or an alias thereof, in particular if this is a long name, and the program references its objects many times)
>>>import math >>>math.pi >>>3.141592653589793 etc.. >>>import math as m #bad example math being so short and standard... >>>m.pi >>>3.141592653589793 etc..
See the Python documentation on this topic
(a) Specifically, what gets imported with from xyz import *
?
if xyz module defines an __all__
variable, it will import all the names defined in this sequence, otherwise it will import all names, except these which start with an underscore.
Note Many libraries have sub-modules. For example the standard library urllib
includes sub-modules like urllib.request
, urllib.errors
, urllib.response
etc. A common point of confusion is that
from urllib import *
would import all these sub-modules. That is NOT the case: one needs to explicitly imports these separately with, say, from urllib.request import *
etc. This incidentally is not specific to import *
, plain import
will not import sub-modules either (but of course, the *
which is often a shorthand for "everything" may mislead people in thinking that all sub-modules and everything else would be imported).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With