Сообщить об ошибке.

Модуль Python и его импорт

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

В Python есть способ поместить определения в файл и использовать их в скрипте или в интерактивном режиме интерпретатора. Такой файл называется модулем. Определения из модуля могут быть импортированы в другие модули или в основной модуль.

Модуль - объект, который служит организационной единицей кода Python. Модули имеют пространство имен, содержащее произвольные объекты Python. Модули загружаются в Python в процессе импорта.

Другими словами это файл, содержащий определения (функции, классы) и операторы Python. Имя файла - это имя модуля с добавленным суффиксом .py. Имя модуля, внутри модуля, доступно в качестве значения глобальной переменной __name__ в виде строки. Используйте текстовый редактор, чтобы создать файл с именем md.py в текущем каталоге со следующим содержимым:

a = [100, 200, 300]

def fib(n):
    """печатает ряд Фибоначчи до n"""
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

class Foo:
    pass

Теперь в интерпретаторе Python импортируйте этот модуль с помощью следующей команды:

>>> import md

Инструкция import md не вводит имена функций, определенных md непосредственно в текущей области видимости, а только вводит имя модуля md. Используя имя модуля, можете получить доступ к функциям и переменным, используя точечную нотацию:

>>> md.fib(1000)
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> md.__name__
# 'md'
>>> md.a
# [100, 200, 300]
>>> md.Foo()
# <md.Foo object at 0x03C181F0>

Если вы собираетесь использовать функцию fib часто, то можно назначить ей локальное имя:

>>> fib = md.fib
>>> fib(500)
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

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

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

Модули могут импортировать другие модули. Обычно, но не обязательно размещать все операторы импорта в начале модуля или скрипта. Импортированные имена модулей помещаются в глобальную область видимости импортируемого модуля или скрипта.

Важно По соображениям эффективности каждый модуль импортируется только один раз за сеанс интерпретатора. Поэтому, если вы меняете/редактируете свои модули, вы должны перезапустить интерпретатор или если это только один модуль, который вы хотите протестировать в интерактивном режиме, используйте importlib.reload(), например import importlib; importlib.reload(modulename).