import mm.__name__ == "m"m.__doc__ == "Module m"m.__file__ == "./m.py"m.__cached__ == "./__pycache__/m.cpython-36.pyc"if __name__ == "__main__": print("The best place for unit testing your module.")from mathplotlib import plot_histogram as histhist всего лишь ссылка на <function mathplotlib.plot_histogram>from ... import *Не стоит так писать даже если в модуле указан
__all__ = [...] с перечислением только определенных импортируемых функций и атрибутовВ момент импорта модуль исполняется полностью сверху вниз (даже если импортируем только одну функцию)
PEP8 рекомендует импортировать руководствуясь следующими правилами:
1) сначала импортируем модули стандартной библиотеки
2) модули других проектов/библиотек/разработчиков
3) модули текущего проекта
4)
1) сначала импортируем модули стандартной библиотеки
2) модули других проектов/библиотек/разработчиков
3) модули текущего проекта
4)
__all__, __version__, __author__ - указываем после docstring, но до импорта каких-либо модулейimport packet.moduleПри импорте модуля из пакета, пакет появляется в области видимости на равне с модулем
from ..foo import somethingимпортирует из модуля
foo родительского пакета текущего пакета функцию/атрибут somethingПаттерн фасад для организации работы с пакетом пакетов без необходимости вникать во внутреннюю структуру пакета:
# useful/bar/__init__.pyfrom .boo import *__all__ = boo.__all__# useful/__init__.pyfrom .foo import *from .bar import *__all__ = foo.__all__ + bar.__all__$ python -m usefulВыполнит код
__main__.py сразу после инициализации __init__.py из пакета useful
