В чем разница между импортом всего модуля и импортом только необходимого метода из модуля в Python?

При использовании scikit learn или других подобных библиотек Python в чем разница между выполнением:

import sklearn.cluster as sk
model = sk.KMeans(n_clusters=n)

И

from sklearn.cluster import KMeans 
model = KMeans(n_clusters=n)

Есть ли преимущество в использовании одного способа перед другим?


person Alex Kinman    schedule 28.12.2016    source источник
comment
Добро пожаловать в StackOverflow. Пожалуйста, прочтите и следуйте инструкциям по публикации в справочной документации. по теме и как чтобы спросить, подайте заявку здесь. StackOverflow - это не служба кодирования или обучения. Это хорошо освещено в документации Python и многих текстах, как в печатном виде, так и в Интернете.   -  person Prune    schedule 28.12.2016
comment
Как объяснено здесь Импорт модуля не выполняется ничего не тратьте зря; модуль всегда полностью импортируется, поэтому нет возможности импортировать только конкретную вещь из модуля   -  person Cory Kramer    schedule 28.12.2016
comment
@Prune из как спросить: Примеры: Хорошо: Почему использование float вместо int дает разные результаты, когда все мои входные данные являются целыми числами? - почему мой вопрос не в категории, а в примере?   -  person Alex Kinman    schedule 28.12.2016
comment
Думаю, это хороший вопрос. Конечно, проблема хорошо задокументирована, и аналогичный вопрос есть на другом сайте SE, но это также хорошо сформулированный вопрос с краткими и ясными примерами.   -  person 2rs2ts    schedule 28.12.2016
comment
Достаточно хорошо - возражение снято. Оставлю свой комментарий как плохой пример с хорошей поправкой.   -  person Prune    schedule 28.12.2016


Ответы (1)


Что ж, в вашем первом примере вы сделали модуль sklearn.cluster доступным как sk и соответственно можете ссылаться на его членов. Во втором примере вы импортировали только один член sklearn.cluster, KMeans, поэтому доступен только он. Вот в чем разница.

Что до преимуществ? Делайте то, что облегчает чтение вашего кода.

person 2rs2ts    schedule 28.12.2016
comment
вы импортировали только один член ... так что доступен только он Я буду осторожен с этой формулировкой. Они фактически импортировали весь модуль, просто только kMeans доступен - person Cory Kramer; 28.12.2016
comment
Возможно, дело в семантике. Да, весь модуль загружен (как видно из sys.modules), но я имел в виду ключевое слово import. - person 2rs2ts; 28.12.2016