Почему не стоит использовать import * в Python

Использование 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 sumdef sum (x, y):    return x + yprint (sum (2, 6))

Рассмотрим пакет A, содержащий функцию sum (a, b).

Ошибка с этим кодом заключается в том, что функция sum, которую мы определяем, переопределяет функцию sum из модуля "a", который мы импортировали, и у нас даже нет представления о ней. Кроме того, становится очень трудно определить, какая функция на самом деле вызывается в случае больших программ.

Правильный метод

# import the module a as limport a as ldef sum (x, y):return x + y# calls the self-defined sum functionprint (sum (2, 6))# calls the sum function defined in the module aprint (l.sum(2, 6))

Кодирование таким образом повышает читабельность кода, а также облегчает его отладку, и вероятность возникновения какого-либо конфликта практически равна нулю.

Источник

Why import star in Python is a bad idea