В чем разница между import modx и modx import *?
Если бы я должен был импортировать какой-то модуль с именем modx, как бы это отличалось от высказывания
from modx import *
Не все ли содержимое будет импортировано из каждого в любом случае? Это в python, чтобы уточнить.
Ответы
Ответ 1
Если вы import somemodule
, содержащиеся глобальные значения будут доступны через somemodule.someglobal
. Если вы from somemodule import *
ВСЕ его глобальные (или те, что указаны в __all__
, если он существует) будут сделаны глобальными, т.е. Вы можете получить к ним доступ с помощью someglobal
без имени модуля перед ним.
Использование from module import *
не рекомендуется, поскольку оно загромождает глобальную область, и если вы импортируете материал из нескольких модулей, вы, вероятно, столкнетесь с конфликтами и перезапишете существующие классы/функции.
Ответ 2
Если a
определяет a.b
и a.c
...
import a
a.b()
a.c()
против.
from a import b
b()
c() # fails because c isn't imported
против.
from a import *
b()
c()
Обратите внимание, что from foo import *
обычно не одобряется, поскольку:
- Он помещает вещи в глобальное пространство имен, не давая вам тонкого контроля
- Это может вызвать конфликты из-за того, что все находится в глобальном пространстве имен
- Непонятно, что на самом деле определено в текущем файле, поскольку список определяемых им значений может варьироваться в зависимости от того, что импортировано.
Ответ 3
Общий вопрос с множеством вопросов, чтобы ответить... вот один: http://effbot.org/zone/import-confusion.htm
По существу, чтобы ответить на ваш конкретный вопрос во второй форме (from modx import *
), вы получаете только публичные элементы в modx