Марк Лутц “Изучаем питон 4е изд.” 666 стр.
Ниже демонстрируется специальный прием, позволяющий импортировать
файлы как модули и запускать их как самостоятельные программы. Каждый
модуль обладает встроенным атрибутом name , который устанавливается
интерпретатором следующим образом:
• Если файл запускается как главный файл программы, атрибуту name на
запуске присваивается значение “ main ”.
• Если файл импортируется, атрибуту name присваивается имя модуля,
под которым он будет известен клиенту.
Благодаря этому модуль может проверить собственный атрибут name
и определить, был ли он запущен как самостоятельная программа или
импортирован другим модулем. Например, предположим, что мы создаем файл
модуля с именем гиппге.ру, который экспортирует единственную функцию с именем
tester:
def tester():
print("It's Christmas in Heaven...")
if __name__ == ' main__' : # Только когда запускается,
tester() # а не импортируется
Этот модуль определяет функцию для клиентов и может импортироваться как
обычный модуль:
% python
>» import runme
>» runme.tester()
It's Christmas in Heaven...
Но в самом конце модуля имеется программный код, который вызывает
функцию, когда этот файл запускается как самостоятельная программа:
% python runme.py
It's Christmas in Heaven...
Таким образом, переменная name может играть роль флага, определяющего
режим использования, позволяя программному коду выполнять разные
действия, когда он используется как импортируемая библиотека или как
самостоятельный сценарий. Вы будете встречать этот прием практически во всех
действующих программах на языке Python, с которыми вам предстоит
столкнуться.
Пожалуй, чаще всего проверка атрибута name выполняется в программном
коде для самопроверки модуля. Проще говоря, вы можете добавить в конец
модуля программный код, который будет выполнять проверку экспортируемых
элементов внутри самого модуля, заключив этот код в условную инструкцию,
проверяющую атрибут name . При таком подходе вы можете использовать
файл в других модулях, импортируя его, и тестировать логику работы,
запуская его из командной строки или каким-либо другим способом. На практике
программный код самопроверки в конце файла, заключенный в условную
инструкцию, проверяющую атрибут name , является, пожалуй, самым
распространенным и удобным способом модульного тестирования в языке Python. (В
главе 35 обсуждаются другие часто используемые способы тестирования
программного кода на языке Python - как будет показано, в стандартной
библиотеке существуют модули unittest и doctest, которые реализуют более
совершенные средства тестирования.)
Прием, основанный на проверке атрибута name , также часто используется
при создании файлов, которые могут использоваться и как утилиты
командной строки, и как библиотеки инструментов. Например, предположим, что
вы пишете на языке Python сценарий поиска файлов. Код принесет больше
пользы, если реализовать его в виде функций и добавить проверку атрибута
name для организации вызова этих функций, когда файл запускается как
самостоятельная программа. При таком подходе сценарий может повторно
использоваться в составе других программ.
Если книгу откроешь, там еще написаны примеры и разъяснения.
И попробуй сам что нибудь попридумывай.
Отредактировано buddha (Май 29, 2012 23:42:02)