JavaRush /Курсы /Модуль 1: Python Core /Импорт модулей

Импорт модулей

Модуль 1: Python Core
11 уровень , 0 лекция
Открыта

1.1 Знакомство с модулями

Модуль в Python — это файл с расширением .py, содержащий код. Модули позволяют разбивать большой код на более мелкие, управляемые части. Каждый модуль может содержать функции, классы и переменные, а также выполнять некоторый код при его импортировании.

Пример простого модуля

Создадим модуль mymodule.py:


# mymodule.py

def greet(name):
    return f"Hello, {name}!"
            
pi = 3.14159
        

Теперь этот модуль можно импортировать и использовать в другом файле.

1.2 Импорт модулей

Python предоставляет несколько способов импорта модулей. Рассмотрим их поочередно.

Импорт всего модуля

Общий вид синтаксиса данной операции имеет вид:


import модуль

Этот метод импортирует весь модуль, и вы можете использовать его функции и переменные, указывая имя модуля.


import модуль

print(модуль.greet("Alice"))  # Вывод: Hello, Alice!
print(модуль.pi)  # Вывод: 3.14159
        

Мы уже раньше делали что-то подобное с модулем math, помните?


import math

print(math.ceil(13 / 7))  # округление вверх
print(math.floor(13 / 7))  # округление вниз
        

Импорт конкретных элементов из модуля

Вы можете импортировать не всё, что есть в модуле, а только некоторые его элементы. Общий вид синтаксиса данной операции имеет вид:


from модуль import func, var

Этот метод импортирует только определенные функции, классы или переменные из модуля, что позволяет использовать их без указания имени модуля.


from mymodule import greet, pi

print(greet("Bob"))  # Вывод: Hello, Bob!
print(pi)  # Вывод: 3.14159
        

Импорт модуля с псевдонимом

Общий вид синтаксиса данной операции имеет вид:


import модуль as alias

Этот метод позволяет импортировать модуль и присвоить ему другое имя, что может быть полезно для сокращения длинных имен модулей или для разрешения конфликтов имен.


import mymodule as mm

print(mm.greet("Charlie"))  # Вывод: Hello, Charlie!
print(mm.pi)  # Вывод: 3.14159
        

Импорт всех элементов из модуля

Общий вид синтаксиса данной операции имеет вид:


from модуль import *

Этот метод импортирует все функции, классы и переменные из модуля, что позволяет использовать их без указания имени модуля. Однако использование этого метода не рекомендуется, так как он может вызвать конфликты имен и затруднить чтение кода.


from mymodule import *

print(greet("Dave"))  # Вывод: Hello, Dave!
print(pi)  # Вывод: 3.14159
        

1.3 Под капотом процесса импорта

Порядок поиска модулей

Когда вы импортируете модуль, Python ищет его в определенном порядке:

  1. Текущий каталог: Python сначала ищет модуль в текущем каталоге, откуда был запущен скрипт.
  2. Переменная окружения PYTHONPATH: Если модуль не найден в текущем каталоге, Python ищет его в каталогах, указанных в переменной окружения PYTHONPATH.
  3. Стандартные каталоги: Если модуль всё еще не найден, Python ищет его в стандартных каталогах, таких как директории, указанные в sys.path.

Пример:


import sys

for path in sys.path:
    print(path)
        

Локальный и глобальный импорт

Импорт модулей можно выполнять как на глобальном уровне (в начале файла), так и на локальном уровне (внутри функции или метода).

Глобальный импорт

Глобальный импорт выполняется в начале файла и делает импортируемый модуль доступным во всем файле.


import math

def calculate_circle_area(radius):
    return math.pi * radius ** 2
        

Локальный импорт

Локальный импорт выполняется внутри функции или метода и делает импортируемый модуль доступным только в этой функции или методе.


def calculate_square_root(x):
    import math
    return math.sqrt(x)
    
print(calculate_square_root(16))
        

Локальный импорт может быть полезен для уменьшения времени загрузки модуля или для предотвращения конфликтов имен.

1.4 Динамический импорт

Динамический импорт позволяет импортировать модули во время выполнения программы. Это может быть полезно, когда необходимо импортировать модули на основе пользовательского ввода или других динамических условий.

Общий вид синтаксиса данной операции имеет вид:


module = __import__("модуль")

Давайте ради примера импортируем модуль math таким способом.


module_name = "math"
module = __import__(module_name)
print(module.sqrt(16))  # Вывод: 4.0

Работа с дальнейшим кодом похожа на использование import as, когда модулю math присваивается псевдоним module.

1.5 Доступ к атрибутам модуля с использованием функции getattr

Функция getattr позволяет динамически получать атрибуты из модуля (или любого объекта). Она может быть полезна в случаях, когда имена атрибутов заранее неизвестны или могут изменяться во время выполнения программы.

Синтаксис функции getattr:


getattr(object, name, default = None)

Где:

  • object — это объект, из которого нужно получить атрибут.
  • name — строка, содержащая имя атрибута.
  • default — значение, возвращаемое в случае, если атрибут с заданным именем не существует. Значение по умолчанию для параметра defaultNone.

Пример использования функции getattr:


import math

# Получаем атрибут sqrt из модуля math
sqrt_function = getattr(math, 'sqrt')

print(sqrt_function(25))  # Вывод: 5.0

# Пытаемся получить несуществующий атрибут, возвращаем значение по умолчанию
non_existent_attr = getattr(math, 'non_existent', 'default_value')

print(non_existent_attr)  # Вывод: default_value
        

В данном примере мы используем функцию getattr для получения функции sqrt из модуля math, а затем вызываем эту функцию для вычисления квадратного корня числа 25. В случае, если атрибут с заданным именем не существует, возвращается значение по умолчанию default_value.

2
Задача
Модуль 1: Python Core, 11 уровень, 0 лекция
Недоступна
Импорт элементов из модуля
Импорт элементов из модуля
2
Задача
Модуль 1: Python Core, 11 уровень, 0 лекция
Недоступна
Динамический импорт модуля
Динамический импорт модуля
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
SWK Уровень 26
9 апреля 2025
Во второй задаче к

Программа должна выполнить вызов полученной 
функции из импортированного модуля.
уместно было бы добавить "с одним параметром".
Дмитрий Уровень 27
3 апреля 2025
Во второй задаче добавьте, пожалуйста, требование о проверке вызываемой функции на наличие, посколько валидатор это требует.
SWK Уровень 26
9 апреля 2025
В "правильном решении", что характерно, проверки нет. Наверное, задачи и валидаторы разные люди пишут...
Mr.Robot Уровень 21 Expert
18 марта 2025
В IDE правой кнопкой на имени подкаталога задачи - "New file". Модуль импортируем без указания расширения ".py", что, кстати, неочевидно из данной лекции
14 января 2025
в IDE не дает создавать файлы в разделе Task Files надо решать в браузере
Zlyden Уровень 49
7 марта 2025
в IDE File --> New --> Python File
Виктор Уровень 25
9 января 2025
В первой задаче сначала надо создать файл в "Дерево классов"
Андрей Уровень 48
30 сентября 2024
Прикольно, даже правильное решение не проходит проверку.