Главная страница
Навигация по странице:

  • 26.9. Другие глобальные переменные

  • 26.11. Тестирование Обычно правильно организованный тестовый код отделяется от кода реализации. Python допускает небольшое исключение из этого правила. 260

  • 26.12. if __name__ == __main__

  • Приложение А Перемещение по файлам

  • Приложение Б Полезные ссылки

  • Как устроен Python. Гид для разработчиков, программистов и интересующихся

  • Как устроен Python. Как устроен Python. Харрисон. Харрисон Мэтт


    Скачать 5.41 Mb.
    НазваниеХаррисон Мэтт
    АнкорКак устроен Python
    Дата05.02.2022
    Размер5.41 Mb.
    Формат файлаpdf
    Имя файлаКак устроен Python. Харрисон.pdf
    ТипДокументы
    #352210
    страница21 из 21
    1   ...   13   14   15   16   17   18   19   20   21

    ПРИМЕЧАНИЕ
    Если вы собираетесь опубликовать свою библиотеку, желательно определить ее версию. В PEP 396 указаны некоторые практические приемы объявления строк версий.
    К числу других распространенных переменных метаданных относятся имя автора, лицензия, дата и контактная информация. При определении в программном коде они могли бы выглядеть так:
    __author__ = 'Matt Harrison'
    __date__ = 'Jan 1, 2017'


    26.11. Тестирование
    259
    __contact__ = 'matt_harrison someplace.com'
    __version__ = '0.1.1'
    26.8. Операции с журналом
    Еще одна переменная, часто объявляемая на глобальном уровне, — средство ведения журнала для модуля. Стандартная библиотека Python включает библиотеку ведения журнала, которая позволяет регистрировать инфор- мацию на разных уровнях детализации в четко определенных форматах.
    Скорее всего, необходимость в записи информации в журнал возникнет у разных классов или функций. Обычно программа выполняет иници- ализацию средства ведения журнала один раз на глобальном уровне, а затем использует полученный дескриптор в модуле.
    26.9. Другие глобальные переменные
    Не используйте глобальные переменные там, где хватает локальных пере- менных. Основные глобальные переменные в коде Python — метаданные, константы и подсистема ведения журнала.
    Глобальные переменные нередко встречаются в коде примеров. Не под- давайтесь искушению копировать такой код. Выделите его в функцию или класс. Это принесет пользу в будущем, когда вы займетесь рефак- торингом или отладкой вашего кода.
    26.10. Реализация
    После глобальных переменных и настройки ведения журнала следует непосредственное содержание кода — реализация. Существенную часть кода займут функции и классы. Основная логика модуля содержится в классе
    Catter
    26.11. Тестирование
    Обычно правильно организованный тестовый код отделяется от кода реализации. Python допускает небольшое исключение из этого правила.

    260
    Глава 26. Полноценный пример
    Строки документации Python могут определяться на уровне модулей, функций, классов и методов. В строках документации можно разместить фрагменты REPL, демонстрирующие использование данной функции, класса или модуля. Такие фрагменты, если они будут хорошо продуманы и построены, эффективно документируют стандартные варианты при- менения модуля.
    Другая интересная возможность doctest
    — проверка документации. Если ваши фрагменты когда-то работали, а теперь не работают, значит, либо изменился ваш код, либо сами фрагменты содержат ошибки. Это можно легко выявить до того, как пользователи начнут жаловаться вам.
    СОВЕТ
    Код doctest может размещаться в отдельном текстовом файле. Чтобы вы- полнить произвольный файл средствами doctest
    , используйте функцию testfile
    :
    import doctest doctest.testfile('module_docs.txt')
    ПРИМЕЧАНИЕ
    Кроме doctest стандартная библиотека Python включает модуль unittest
    , реализующий типичную методологию xUnit — подготовка/проверка/за- вершение. У обоих стилей тестирования — doctest и unittest
    — есть как достоинства, так и недостатки. Стиль doctest обычно создает больше труд- ностей с отладкой, а стиль unittest содержит шаблонный код, который считается слишком «завязанным на Java». Вы можете сочетать оба стиля, чтобы получить хорошо документированный и хорошо протестированный код.
    26.12. if __name__ == '__main__':
    Если ваш файл должен выполняться в качестве сценария, в конце сце- нария вы найдете следующий фрагмент:
    if __name__ == '__main__':
    sys.exit(main(sys.argv[1:]) or 0)

    26.13. __name__
    261
    Чтобы понять эту команду, необходимо понимать смысл переменной
    __name__
    26.13. __name__
    Python определяет переменную уровня модуля
    __name__
    для любого
    импортируемого модуля или любого выполняемого файла. Обычно значением
    __name__
    является имя модуля:
    >>> import sys
    >>> sys.__name__
    'sys'
    >>> import xml.sax
    >>> xml.sax.__name__
    'xml.sax'
    У этого правила есть исключение. При выполнении модуля (то есть python3
    some_module.py
    ) значением
    __name__
    является строка "__main__"
    По сути, значение
    __name__
    сообщает, загружается ли файл как библио- тека или же выполняется как сценарий.
    ПРИМЕЧАНИЕ
    Использование
    __name__
    можно продемонстрировать на простом примере.
    Создайте файл some_module.py со следующим кодом:
    print("The __name__ is: {0}".format(__name__))
    Теперь запустите REPL и импортируйте этот модуль:
    >>> import some_module
    The __name__ is: some_module
    А теперь выполните этот модуль:
    $ python3 some_module.py
    The __name__ is: __main__
    Одна из распространенных идиом в мире Python — размещение подоб- ных проверок в конце модуля, который также может служить сценарием.
    Такая проверка определяет, выполняется файл или импортируется:

    262
    Глава 26. Полноценный пример if __name__ == '__main__':
    # выполнение sys.exit(main(sys.argv[1:]) or 0)
    Эта простая команда запускает функцию main
    , когда файл выполняется.
    И наоборот, если файл используется в качестве модуля, функция main автоматически выполняться не будет. Функция sys.exit вызывается с возвращаемым значением main
    (или 0, если main не возвращает значе- ние), как делают все добропорядочные программы в мире UNIX.
    Функция main получает параметры командной строки в списке sys.argv
    В самом начале sys.argv находится элемент python3
    , поэтому нам при- ходится создать срез sys.argv
    , чтобы исключить этот элемент перед тем, как передавать параметры main
    СОВЕТ
    Некоторые разработчики размещают логику выполнения (код, расположен- ный внутри функции main
    ) прямо под проверкой if
    __name__
    ==
    '__main__'
    :.
    Несколько причин для хранения логики в функции:
    • Функция main может вызываться из других мест.
    • Функцию main можно легко тестировать с разными аргументами.
    • Сокращение объема кода, выполняемого на глобальном уровне.
    26.14. Итоги
    В этой главе был проанализирован код Python в сценариях командного интерпретатора. Мы рассмотрели некоторые полезные практические приемы и стандартные соглашения программирования.
    Если вы будете структурировать свой код так, как описано в этой главе, то будете следовать лучшим практикам программирования на языке
    Python. Описанная структура также упростит чтение вашего кода дру- гими разработчиками.

    26.15. Упражнения
    263
    26.15. Упражнения
    1. Скопируйте код cat.py
    . Добейтесь того, чтобы он заработал на вашем компьютере. Не думайте, что это напрасный труд — занимаясь про- граммированием, вы очень часто не создаете что-то с нуля, а повтор- но используете код, написанный другими людьми.
    2. Напишите сценарий convert.py
    , который преобразует файл из одной кодировки в другую. Программа должна получать следующие па- раметры командной строки:
    • Имя входного файла.
    • Входная кодировка (по умолчанию UTF-8).
    • Выходная кодировка.
    • Режим обработки ошибок (игнорировать/выдать исключение).

    27
    В начале пути
    К этому моменту вы уже достаточно хорошо понимаете, как работают программы Python, уверенно владеете REPL и умеете анализировать классы с использованием функций dir и help
    Что дальше? Это зависит от вас. В принципе, у вас есть все предпосылки для использования Python для сайтов, GUI-программ или вычислитель- ных приложений.
    Среди огромных преимуществ Python можно выделить различные со- общества, связанные с разными областями программирования. Суще- ствует множество локальных пользовательских групп, конференций, списков рассылки и социальных сетей, посвященных разным аспектам
    Python. Многие из этих групп охотно принимают новых программистов и делятся своими знаниями. Не бойтесь опробовать что-нибудь новое; в Python это делается просто, и, скорее всего, найдутся и другие разра- ботчики с похожими интересами.

    Приложение А
    Перемещение по файлам
    Если вы еще не знакомы с навигацией в файловой системе с терминала, ниже приведено краткое введение. Сначала необходимо открыть тер- минал — одно из тех окон с большим объемом текста, которые обычно показывают в фильмах про хакеров. Вообще говоря, программировать можно и без них, но умение переходить между каталогами и выполнять команды из терминала — навык безусловно полезный.
    А.1. Mac и UNIX
    На компьютерах Mac вызовите Spotlight комбинацией клавиш
    Command+Space и введите terminal
    , чтобы запустить терминальное при- ложение для Mac.
    В системах семейства Linux способ запуска терминала зависит от кон- фигурации рабочей среды. Например, в системах Ubuntu можно вос- пользоваться комбинацией клавиш
    Ctr+Alt+T
    . Простейший терминал, присутствующий в большинстве систем, называется xterm
    Вы должны знать несколько основных команд:
    
    cd
    — переход в другой каталог. Например, команда
    $ cd /Documents выполняет переход в каталог
    Documents
    , находящийся в домашнем ка- талоге (

    сокращенное обозначение домашнего каталога, которым является каталог
    /Users/<имя_пользователя>
    на Mac или
    /home/<имя_поль- зователя>
    в Linux);
    
    pwd
    — вывод текущего каталога, в котором вы находитесь;
    
    ls
    — вывод содержимого текущего каталога.

    266
    Приложение А
    Если у вас имеется сценарий Python, хранящийся в файле
    /work/intro-to- py/hello.py
    , его можно выполнить следующей последовательностью команд:
    $ cd /work/intro-to-py
    $ python3 hello.py
    A.2. Windows
    В системе Windows нажмите
    Win+R
    , чтобы открыть интерфейс запуска программ. Введите cmd
    , чтобы открыть окно командной строки.
    Основные команды:
    
    cd
    — переход в другой каталог. Например, команда c:> cd C:\Users выполняет переход в каталог
    C:\Users;
    
    echo
    %CD%
    — вывод текущего каталога, в котором вы находитесь;
    
    Dir
    — вывод содержимого текущего каталога.
    Если у вас имеется сценарий Python, хранящийся в файле
    C:\Users\matt\
    intro-to-py\hello.py
    , его можно выполнить следующей последовательностью команд:
    C:> cd C:\Users\matt\intro-to-py
    C:\Users\matt\intro-to-py> python hello.py

    Приложение Б
    Полезные ссылки
    Полезные ссылки на тему Python:
    https://python.org/
    — домашняя страница Python https://github.com/mattharrison/Tiny-Python-3.6-Notebook
    — справочник по Python
    3.6.
    http://docutils.sourceforge.net/
    — reStructuredText — упрощенный язык раз- метки для документации Python.
    https://pyformat.info
    — удобный справочник по форматированию строк.
    https://pypi.python.org/pypi
    — Python Package Index — сторонние пакеты.
    https://www.python.org/dev/peps/pep-0008/
    — PEP 8 — стандарт оформления кода.
    https://www.anaconda.com/download/
    — Anaconda — альтернативная программа установки Python с множеством сторонних пакетов.
    https://www.djangoproject.com/
    — Django — популярный веб-фреймворк.
    http://scikit-learn.org/
    — машинное обучение на Python.
    https://www.tensorflow.org/
    — глубокое обучение на Python.
    https://www.reddit.com/r/Python/
    — новости Python.

    Об авторе
    Мэтт Харрисон использует Python с 2000 года.
    Он руководит компанией MetaSnake, занима- ющейся консультационными услугами и про- ведением корпоративного обучения в области
    Python и теории анализа данных. В прошлом он работал в областях научных исследований, управления сборкой и тестированием, бизнес- аналитики и хранения данных.
    Он выступал с презентациями и учебными лекциями на таких конферен- циях, как Strata, SciPy, SCALE, PyCON и OSCON, а также на локальных пользовательских конференциях. Структура и материал этой книги основаны на его практическом опыте преподавания Python. Мэтт пери- одически публикует в «Твиттере» полезную информацию, относящуюся к Python (
    @__mharrison__
    ).

    Научные редакторы
    Роджер Э. Дэвидсон (Roger A. Davidson) в настоящее время является де- каном факультета математики в колледже Америкэн Ривер (Сакраменто, штат Калифорния). Его докторская диссертация была написана на тему авиационно-космической техники, но он также является обладателем дипломов об образовании в области computer science, электротехники и системотехники, а также недавно получил сертификат в области data science (с чего и началось его увлечение Python). На протяжении своей карьеры Роджер работал в NASA, в компаниях из списка Fortune 50, в стартапах и муниципальных колледжах. Он с энтузиазмом относится к образованию, науке (не только к обработке данных), пирогам с ежеви- кой и руководству неоднородными коллективами при решении больших задач.
    Эндрю Маклафлин (AndrewMcLaughlin) — программист и проек- тировщик, системный администратор в первую половину дня и се- мьянин во вторую. Из-за своего внимания к деталям занимается веб- программированием с 1998 года. Обладатель диплома с отличием университета Джорджа Фокса, Эндрю получил степень в области систем управления и информации. В свободное время он ходит в турпоходы со своей женой и двумя детьми, а также иногда работает в столярной мастер- ской (все пальцы пока на месте). Читайте его публикации в «Твиттере»:
    @amclaughlin

    Мэтт Харрисон
    Как устроен Python.
    Гид для разработчиков, программистов
    и интересующихся
    Перевел с английского Е. Матвеев
    Заведующая редакцией
    Ю. Сергиенко
    Ведущий редактор
    К. Тульцева
    Литературный редактор
    О. Букатка
    Художественный редактор
    С. Заматевская
    Корректоры
    С. Беляева, И. Тимофеева
    Верстка
    Л. Егорова
    Изготовлено в России. Изготовитель: ООО «Прогресс книга».
    Место нахождения и фактический адрес: 194044, Россия, г. Санкт-Петербург,
    Б. Сампсониевский пр., д. 29А, пом. 52. Тел.: +78127037373.
    Дата изготовления: 10.2018. Наименование: книжная продукция. Срок годности: не ограничен.
    Импортер в Беларусь: ООО «ПИТЕР М», 220020, РБ, г. Минск, ул. Тимирязева, д. 121/3, к. 214, тел./факс: 208 80 01.
    Налоговая льгота — общероссийский классификатор продукции ОК 034-2014, 58.11.12 —
    Книги печатные профессиональные, технические и научные.
    Подписано в печать 09.10.18. Формат 70×100/16. Бумага офсетная. Усл. п. л. 21,930. Тираж 1200. Заказ 0000.
    Отпечатано в ОАО «Первая Образцовая типография». Филиал «Чеховский Печатный Двор».
    142300, Московская область, г. Чехов, ул. Полиграфистов, 1.
    Сайт: www.chpk.ru. E-mail: marketing@chpk.ru
    Факс: 8(496) 726-54-10, телефон: (495) 988-63-87
    1   ...   13   14   15   16   17   18   19   20   21


    написать администратору сайта