Ваш первый модуль: шаг 3
Теперь мы поместим кое-что в файл модуля:
print("I like to be a module.")
module.py
Можете заметить разницу между модулем и обычным скриптом? Пока их нет.
Этот файл можно запустить как любой другой скрипт. Попробуйте сами.
Что происходит? Вы должны увидеть следующую строку в вашей консоли:
I like to be a module.
output
Ваш первый модуль: шаг 4
Давайте вернемся к файлу main.py:
import module
main.py
Запустите его. Что вы видите? Надеюсь, Вы видите что-то вроде этого:
I like to be a module.
output
Что же это на означает?
Когда модуль импортируется, его содержимое неявно выполняется Python. Это дает модулю возможность инициализировать некоторые из его внутренних аспектов (например, он может назначать некоторые переменные с полезными значениями). Примечание: инициализация происходит только один раз, когда происходит первый импорт, поэтому присваивания, выполняемые модулем, не повторяются без необходимости.
Представьте себе следующий контекст:
- Есть модуль с именем mod1;
- Есть модуль с именем mod2, который содержит инструкцию
import mod1
; - Есть основной файл, который содержит инструкции
import mod1
иimport mod2
.
На первый взгляд вы можете подумать, что mod1 будет импортирован дважды - к счастью, происходит только первый импорт. Python запоминает импортированные модули и молча пропускает все последующие попытки импортировать их.
Python может сделать гораздо больше. Он также создает переменную с именем __name__
.
Кроме того, каждый исходный файл использует свою собственную, отдельную версию переменной - она не используется совместно другими модулями.
Мы покажем вам, как его использовать. Немного изменим модуль:
print("I like to be a module.")
print(__name__)
module.py
Теперь запустите файл module.py. Вы должны увидеть следующие строки:
I like to be a module
__main__
Теперь запустите файл main.py. И? Вы видите то же самое, что и мы?
I like to be a module
module
Мы можем сказать, что:
- когда Вы запускаете файл напрямую, его переменная
__name__
устанавливается в__main__
; - когда файл импортируется как модуль, его переменной
__name__
присваивается имя файла (исключая .py).
Вот как Вы можете использовать переменную __main__
для определения контекста, в котором был активирован Ваш код:
if __name__ == "__main__":
print("I prefer to be a module.")
else:
print("I like to be a module.")
module.py
Однако есть более умный способ использования переменной. Если Вы напишете модуль, заполненный несколькими сложными функциями, Вы можете использовать его, чтобы разместить серию тестов, чтобы проверить, работают ли функции должным образом.
Каждый раз, когда Вы изменяете любую из этих функций, Вы можете просто запустить модуль, чтобы убедиться, что Ваши изменения не испортили код. Эти тесты будут опущены, когда код будет импортирован как модуль.