Module (52%)
Section (27%)

Ваш первый модуль: шаг 3

Теперь мы поместим кое-что в файл модуля:

Updating the module.py file

print("I like to be a module.")

module.py

Можете заметить разницу между модулем и обычным скриптом? Пока их нет.

Этот файл можно запустить как любой другой скрипт. Попробуйте сами.

Что происходит? Вы должны увидеть следующую строку в вашей консоли:

I like to be a module.

output

Ваш первый модуль: шаг 4

Давайте вернемся к файлу main.py:

The main.py file containing the import module instruction

import module

main.py

Запустите его. Что вы видите? Надеюсь, Вы видите что-то вроде этого:

I like to be a module.

output

Что же это на означает?

Когда модуль импортируется, его содержимое неявно выполняется Python. Это дает модулю возможность инициализировать некоторые из его внутренних аспектов (например, он может назначать некоторые переменные с полезными значениями). Примечание: инициализация происходит только один раз, когда происходит первый импорт, поэтому присваивания, выполняемые модулем, не повторяются без необходимости.

Представьте себе следующий контекст:

  • Есть модуль с именем mod1;
  • Есть модуль с именем mod2, который содержит инструкцию import mod1;
  • Есть основной файл, который содержит инструкции import mod1 и import mod2.

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




Python может сделать гораздо больше. Он также создает переменную с именем __name__.

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

Мы покажем вам, как его использовать. Немного изменим модуль:

Updating the module.py file

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__ для определения контекста, в котором был активирован Ваш код:

Updating the module.py file

if __name__ == "__main__": print("I prefer to be a module.") else: print("I like to be a module.")

module.py

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

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