Использование import * в программах python считается плохой привычкой, поскольку таким образом вы ухудшаете пространств имен, оператор import * импортирует все функции и классы в ваше собственное пространство имен (namespace), что может привести к конфликту с функциями, которые вы определяете, или функциями других импортируемых библиотек.
Кроме того, в некоторых случаях становится очень трудно сказать, из какой библиотеки исходит конкретная функция. Риск переопределения переменных/функций и т. д. всегда сохраняется при использовании практики импорта*.
Так почему же не следует использовать import *(all), давайте узнаем.
Читаемость кода
- Остается загадкой то, из какого модуля была импортирована определенная вещь. Это приводит к низкой читабельности кода.
- Засорение пространства имен, import * импортирует все функции и классы в вашем собственном пространстве имен, которые могут конфликтовать с функциями и классами других библиотек.
- Возможность hiding bugs (скрытия багов)
- Такие инструменты, как pyflakes, нельзя использовать для статистического обнаружения ошибок в исходном коде.
Это не означает, что использовать import * нельзя, если бы вам сказали, что в этой вселенной нет ничего подобного import*, вы бы жаждали этого. Единственное, что вы должны помнить при использовании import*, это то, что вы всегда должны использовать его осторожно и с соблюдением дисциплины.
Теперь давайте рассмотрим пример:
# import the module a using import * from a import * # define a function sum def sum (x, y): return x + y print (sum (2, 6))
Рассмотрим пакет A, содержащий функцию sum (a, b).
Ошибка с этим кодом заключается в том, что функция sum, которую мы определяем, переопределяет функцию sum из модуля “a”, который мы импортировали, и у нас даже нет представления о ней. Кроме того, становится очень трудно определить, какая функция на самом деле вызывается в случае больших программ.
Правильный метод
# import the module a as l import a as l def sum (x, y): return x + y # calls the self-defined sum function print (sum (2, 6)) # calls the sum function defined in the module a print (l.sum(2, 6))
Кодирование таким образом повышает читабельность кода, а также облегчает его отладку, и вероятность возникновения какого-либо конфликта практически равна нулю.
Источник
Why import star in Python is a bad idea