Should wildcard import be avoided?
The answer to your question's title is "yes": I recommend never using from ... import *
, and I discussed the reasons in another very recent answer. Briefly, qualified names are good, barenames are very limited, so the "third option" is optimal (as you'll be using qualified names, not barenames) among those you present.
(Advantages of qualified names wrt barenames include ease of faking/mocking for testing purposes, reduced to nullified risk of unnoticed errors induced by accidental rebinding, ability to "semi-fake" the top name in a "tracing class" for the purpose of logging exactly what you're using and easing such activities as profiling, and so forth -- disadvantages, just about none... see also the last-but-not-least koan in the Zen of Python, import this
at the interactive interpreter prompt).
Equally good, if you grudge the 7 extra characters to say QtCore.whatever
, is to abbreviate -- from PyQt4 import QtCore as Cr
and from PyQt4 import QtGi as Gu
(then use Cr.blah
and Gu.zorp
) or the like. Like all abbreviations, it's a style tradeoff between conciseness and clarity (would you rather name a variable count_of_all_widgets_in_the_inventory
, num_widgets
, or x
? often the middle choice would be best, but not always;-).
BTW, I would not use more than one as
clause in a single from
or import
statement (could be confusing), I'd rather have multiple statements (also easier to debug if any import is giving problem, to edit if you change your imports in the future, ...).
There are also good cases for import *
. ie. it's common for Django developers to have many config files and chain them using import *:
settings.py:FOO = 1BAR = 2DEBUG = Falsetest_settings.py:from settings import *DEBUG = True
In this case most disadvantages of import *
become advantages.
Python doc says:
Although certain modules are designed to export only names that follow certain patterns when you use import *, it is still considered bad practice in production code.
It can have side effects and be very difficult to debug
Personally, I am using import
rather than from import
because I find awful big declarations at the beginning of the file and I think it keeps the code more readable
import PyQt4PyQt4.QtCore
If the module name is too long and can be renamed locally with the as
keyword. For example:
import PyQt4.QtCore as Qc