Manevant
@Manevant
Учу Python

В чем разница импорта библиотек (import *)?

Привет.
Возник вопрос.
Какова ключевая разница между этими способами импорта?
Что будет импортирована и под какими именами?

from xml.dom import minidom

from xml.dom.minidom import *


Является ли способ с ' * ' плохим способом? И почему?
  • Вопрос задан
  • 3477 просмотров
Решения вопроса 2
ptitca_zu
@ptitca_zu
Programmer. Reader. Introvert
Мне очень понравилось разъяснение, которое давалось в курсе на CodeAcademy, если мне память не изменяет. Там было так.

Вы сидите в комнате и что-то делаете, а коробки (модули) с инструментами (функциями) находятся в другой комнате. Также у вас есть помощник (интерпретатор), который приносит вам коробки и инструменты из другой комнаты. Вы можете попросить его 3-мя способами.

1. import box
Принеси мне коробку box, я сам буду брать из нее нужные инструменты

2. from box import tool
Принеси мне tool из коробки box, я буду им пользоваться, не залезая в коробку

3. from box import *
Принеси мне коробку box и достань из нее все инструменты

Вообще, в больших проектах лучше использовать 1 (или 2) и стараться избегать 3.
Ответ написан
Комментировать
@throughtheether
human after all
Если вы уверены, что в проекте подобный импорт (import *) будет использоваться только один раз, то ничего страшного я не вижу. Другое дело, что чаще всего это предположение верно для проектов малого размера.

Рассмотрим случай множественного импорта с использованием фразы (import *)
from xml.dom.minidom import *
from mymodule import *
Если в модуле mymodule есть функция parse (она же есть и в xml.dom.minidom), то получится конфликт имен. При большом количестве конфликтующих import-выражений бывает затруднительно понять, из какого модуля в результате эффективно импортирована функция (т.е. чье определение 'победило').

Ну и можно обратиться к PEP-8:
Wildcard imports (from import *) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы