# import()

Функция `__import__()` в Python используется для динамического импорта модулей.

**Назначение**:

* Импортировать модуль во время выполнения программы.
* Обеспечить более гибкий контроль над процессом импорта, чем обычное выражение `import`.

**Возврат**:

* Возвращает импортированный модуль.

**Описание**:

* Принимает несколько аргументов:
  1. `name` (обязательный) - имя импортируемого модуля.
  2. `globals` (необязательный) - словарь глобальных имен.
  3. `locals` (необязательный) - словарь локальных имен.
  4. `fromlist` (необязательный) - список имен для импорта из модуля.
  5. `level` (необязательный) - уровень относительного импорта.

**Примеры**:

1. ***Базовый импорт модуля***
2. ***Импорт из пакета***
3. ***Условный импорт***

{% tabs %}
{% tab title="1." %}

```python
math = __import__('math')
print(math.pi)  # Выведет: 3.141592653589793
```

{% endtab %}

{% tab title="2." %}

```python
os_path = __import__('os.path', fromlist=['join'])
print(os_path.join('dir', 'file.txt'))  # Выведет: dir/file.txt
```

{% endtab %}

{% tab title="3." %}

```renpy
module_name = 'math' if some_condition else 'cmath'
module = __import__(module_name)
print(module.sqrt(4))  # Выведет: 2.0 или (2+0j), в зависимости от условия
```

{% endtab %}
{% endtabs %}

**Использование**:

* Для динамического импорта модулей на основе условий выполнения программы.
* В случаях, когда имя импортируемого модуля неизвестно до времени выполнения.
* Для более тонкого контроля над процессом импорта, чем предоставляет обычный `import`.
* В некоторых случаях метапрограммирования.

Функция `__import__()` является низкоуровневой функцией, которая лежит в основе работы оператора `import`. Она предоставляет более гибкий контроль над процессом импорта, но её использование требует осторожности.

Важно отметить несколько моментов:

1. В большинстве случаев предпочтительнее использовать обычный `import` или функцию `importlib.import_module()`, которая предоставляет более высокоуровневый интерфейс.
2. Использование `__import__()` может сделать код менее читаемым и более сложным для понимания.
3. При использовании `__import__()` нужно быть осторожным с безопасностью, особенно если имя импортируемого модуля определяется динамически.

В современном Python рекомендуется использовать модуль `importlib` для динамического импорта, так как он предоставляет более чистый и безопасный API для этой цели.
