__import__
Функция __import__() используется для импорта модулей во время выполнения. Она является встроенной функцией и редко используется напрямую, так как для обычного импорта предпочтительно использовать ключевое слово import.
Синтаксис
__import__(name, globals=None, locals=None, fromlist=(), level=0)
Аргументы
- name:
- Что означает: Имя модуля для импорта.
- Возможные значения: Строка, указывающая на модуль (например, 'math').
- globals (необязательный):
- Что означает: Словарь глобальных переменных, в контексте которых производится импорт.
- Возможные значения: Обычно globals().
- locals (необязательный):
- Что означает: Словарь локальных переменных (игнорируется).
- fromlist (необязательный):
- Что означает: Список атрибутов или подмодулей для импорта (например, ['sin', 'cos']).
- level (необязательный):
- Что означает: Уровень вложенности для относительного импорта.
- Возможные значения: 0 (по умолчанию) для абсолютного импорта, отрицательные или положительные числа для относительного импорта.
Возвращаемое значение
Возвращает объект импортированного модуля или его части, если указаны fromlist.
Примеры использования
# Импорт модуля math
math = __import__('math')
print(math.sqrt(16)) # Вывод: 4.0
# Импорт функции sin из модуля math
math = __import__('math', fromlist=['sin'])
print(math.sin(0)) # Вывод: 0.0
# Относительный импорт
my_module = __import__('..subpackage.module', globals(), locals(), level=1)
Частые ошибки
Указание некорректного имени модуля:
__import__('nonexistent_module') # Ошибка: ModuleNotFoundError
Как исправить: Убедитесь, что модуль доступен в текущей среде выполнения.
Ошибка с относительным импортом:
__import__('.module', globals(), locals(), level=1) # Ошибка: ValueError
Как исправить: Убедитесь, что относительный импорт корректен и начинается с . или ...
Часто задаваемые вопросы
Когда следует использовать __import__ вместо import? Только в ситуациях, когда модуль нужно импортировать динамически (например, имя модуля неизвестно до выполнения программы).
Можно ли использовать __import__ для импорта вложенных модулей? Да, с помощью аргумента fromlist. Например:
mod = __import__('os.path', fromlist=['path']) print(mod) # Вывод: <module 'posixpath' или 'ntpath'>