Junior
58
questionbank

В чем разница между 'from foo import bar' и 'from foo import *'?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

from foo import bar импортирует только конкретный объект bar из модуля foo. Этот объект становится доступным по имени bar.

from foo import * импортирует все публичные имена из модуля foo. Все эти имена становятся доступными в текущем пространстве имен без префикса foo.. Публичными считаются имена, не начинающиеся с нижнего подчеркивания (_), если только не определен список __all__.

python
python

Разница:

  • from foo import bar: Точный контроль над импортируемыми объектами, меньше вероятность конфликтов имен.
  • from foo import *: Импортирует все, удобно для интерактивных сессий или небольших скриптов, но небезопасно в больших проектах из-за возможного перезатирания имен и затруднения отслеживания происхождения объектов.

Считается плохой практикой использовать from foo import * в продакшн-коде, за исключением случаев, когда модуль явно предназначен для такого импорта (например, UI-фреймворки).