#python #python-import
Вопрос:
Я читал https://www.python.org/dev/peps/pep-0008/#imports но я не нашел явного подтверждения.
Предполагая следующую структуру пакета:
|-package1
|--|__init__.py
│--|module.py
Я хочу импортировать module.py
внутрь __init__.py
.
Интересно, есть ли какая-то семантическая разница между:
from . import module
и
from .module import *
предполагая, что я хочу импортировать все внутри module.py
каждый раз package
, когда загружается.
Комментарии:
1. Вы пробовали? Имело ли это какое-то значение?
2. Я не уверен, что вы подразумеваете под семантическая разница (потому что два высказывания, очевидно, семантически разные), но если вы имеете в виду, если у них есть какие-разному влияют на то, как вы продолжите пользоваться библиотекой оттуда, то да, потому что пространство имен будет по-другому, то есть как ссылки на различные объекты
module
.3. @mapf Очевидно, что эти два утверждения синтаксически различны. Я спрашивал, отличаются ли они также семантически . Ответ-да.
Ответ №1:
Большая разница между этими двумя вещами заключается в том, что в первом случае имена сохраняются в пространстве имен, во module
втором примере все имена импортируются из module
текущего пространства имен.
Предположим module.py
, определяет функцию foo
.
from . import module
module.foo()
против.
from .module import *
foo()
Но что касается того, как система импорта загружает модуль/пакет, ничего не меняется. Оба оператора импорта адресуются точно к одному и тому же модулю и только к этому модулю. Способ доступа к импортированному модулю по имени зависит от инструкции импорта, как показано выше.
Кроме того, PEP8-это просто руководство по стилю. PEP328 расскажет вам больше об относительном импорте