> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-python/importy.md).

# Импорты

1. **Импорт модуля целиком**: Вы можете импортировать весь модуль, чтобы использовать его содержимое. Например:

   ```python
   import math
   result = math.sqrt(25)
   ```
2. **Импорт конкретного объекта из модуля**: Вы можете импортировать только определенный объект из модуля. Например:

   ```python
   from math import sqrt
   result = sqrt(25)
   ```
3. **Импорт модуля с псевдонимом**: Вы можете импортировать модуль с псевдонимом (или сокращенным именем), чтобы сделать код более читаемым. Например:

   ```python
   import numpy as np
   result = np.array([1, 2, 3])
   ```
4. **Импорт всех объектов из модуля**: Вы можете импортировать все объекты из модуля. Это не рекомендуется, так как это может привести к конфликтам имен. Например:

   ```python
   from module_name import *
   ```
5. **Импорт из пакетов**: Пакеты - это способ организации модулей в иерархической структуре. Вы можете импортировать модуль из пакета следующим образом:

   ```python
   from package_name import module_name
   ```
6. **Условный импорт**: Иногда вы можете захотеть импортировать модуль или объект только при определенных условиях. Это может быть полезно, чтобы избежать ошибок во время импорта. Например:

   ```python
   if some_condition:
       from module_name import object_name
   ```
7. **Локальный импорт**: Иногда вам может потребоваться импортировать модуль из текущей директории или из поддиректории. Вы можете сделать это, добавив путь к модулю в переменную `sys.path` и используя стандартный импорт. Например:

   ```python
   import sys
   sys.path.append('путь_к_модулю')
   import module_name
   ```

Импорт всех объектов из модуля с использованием выражения `from module_name import *` имеет несколько недостатков:

1. **Потенциальные конфликты имен**: Когда вы импортируете все объекты из модуля, все имена из этого модуля становятся доступными в текущем пространстве имен. Это может привести к конфликтам имен, особенно если модуль содержит объекты с одинаковыми именами, что затрудняет отслеживание происхождения объектов.
2. **Ухудшение читаемости кода**: Использование `import *` может ухудшить читаемость кода, потому что неясно, откуда берутся конкретные объекты. Для других разработчиков и для вас в будущем может быть трудно определить, какие имена извлечены из модуля.
3. **Потеря контроля**: Импорт всех объектов делает ваш код менее предсказуемым и усложняет отслеживание использования различных функций и классов. Ваш код становится менее модульным и более трудным для поддержки.
4. **Неявные зависимости**: При использовании `import *` ваши зависимости становятся неявными. Это может затруднить понимание, какие модули используются в вашем коде, и сделать его менее прозрачным.

Из-за этих недостатков рекомендуется избегать использования `from module_name import *` и предпочитать более явные именованные импорты. Такой подход делает ваш код более ясным, предсказуемым и устойчивым к изменениям.
