Если программа становится длинная, то ее можно разделить на несколько файлов для упрощения обслуживания. Вы также можете использовать какую то функцию, написанную один раз в нескольких программах, без копирования ее определения в каждую программу.
В 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)
.