Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ -c при вызове python.exe в Windows или python3 в macOS и Linux
• FIXME — эта часть кода работает не полностью;
• HACK — эта часть кода работает (возможно, по минимуму), но ее можно улучшить;
• XXX — общее предупреждение, часто весьма серьезное.
Для таких напоминаний часто используются следующие метки:
• TODO — общее напоминание о работе, которую необходимо выполнить;
• «Python Cookbook» (O’Reilly Media, 2013) Дэвида Бизли (David Beazley) и Брайана К. Джонса (Brian K. Jones)7 — обширный список фрагментов кода, которые помогут обновить репертуар любого начинающего разработчика Python;
• «Fluent Python» (O’Reilly Media, 2021) Лучано Рамальо (Luciano Ramalho)8 — капитальный труд для исследования тонкостей языка Python. И хотя почти 800-страничный том выглядит устрашающе, вы не пожалеете о потраченном времени.
«Effective Python» (Addison-Wesley Professional, 2019) Бретта Слаткина (Brett Slatkin)6 — впечатляющая под
На ежегодной конференции PyCon наряду со многими региональными конференциями предлагаются многочисленные лекции для программистов разных уровней квалификации. Организаторы PyCon предоставляют бесплатный доступ к этим материалам на
https://pyvideo.org/. На странице Tags можно легко найти доклады по темам, интересующим вас.
Если не понимать, что оператор присваивания = всегда копирует ссылку, а не объект, можно внести в программу ошибку: вы думаете, что копируете объект, тогда как в действительности копируется ссылка на исходный объект. К счастью, это не создает проблем с неизменяемыми значениями (целыми числами, строками и кортежами) по причинам, которые объясняются в подразделе «Изменяемость и неизменяемость» на с. 143.
Во всех языках программирования существуют собственные приемы и «передовые» практики. В этой главе я рассказал о конкретных способах написания питонического кода, которые создали программисты для оптимального использования синтаксиса Python.
В основе питонического кода лежат 20 тезисов документа «Дзен Python», которые отражают принципы написания кода на Python. Эти положения следует рассматривать как субъективное мнение; они не являются абсолютно необходимыми для написания программ на Python, но помнить о них безусловно стоит.
Значимые отступы Python (не путайте со значимыми пробелами!) вызывают больше всего протестов со стороны начинающих программистов. И хотя почти во всех языках программирования отступы используются для удобочитаемости кода, Python требует, чтобы отступы заменяли более привычные фигурные скобки, применяемые в других языках.
Модуль Python timeit позволяет быстро профилировать время выполнения кода; это всегда лучше, чем просто предположить, что какой-то код работает быстрее. И хотя многие программисты на Python используют конструкцию range(len()) для циклов for, функция enumerate() предоставляет более чистый синтаксис для получения индекса и значения при переборе последовательности. Аналогичным образом команда with предоставляет более чистый и надежный механизм работы с файлами по сравнению с ручными вызовами open() и close(). Команда with гарантирует, что метод close() будет вызван в любой ситуации, когда управление выйдет за пределы блока команды with.
В Python предусмотрено несколько способов интерполяции строк. Изначально спецификатор преобразования %s помечал позиции, в которых строки должны вставляться в исходную строку. Современный подход для версии Python 3.6 основан на использовании f-строк. У f-строк строковый литерал помечается префиксом f, а фигурные скобки отмечают, где в строке могут размещаться строки (или целые выражения).
Синтаксис [:] для создания поверхностных копий списков выглядит немного странно и не может однозначно считаться питоническим, но он стал популярен в качестве способа быстрого создания поверхностных копий списков.
У словарей определены методы get() и setdefault() для выполнения операций с несуществующими ключами. Также словарь collections.defaultdict использует значение по умолчанию для несуществующих ключей. Так как в Python нет команды switch, использование словаря позволяет компактно записать эквивалент switch без нескольких команд if-elif-else; при выборе между двумя значениями также можно использовать тернарный оператор.
Цепочка операторов == позволяет проверить, что несколько переменных равны друг другу, а оператор in — проверить, что переменная имеет одно из нескольких возможных значений.
В этой главе были рассмотрены некоторые идиомы языка Python, а также даны рекомендации относительно того, как писать более питонический код. В следующей главе рассматриваются некоторые проблемы и ловушки, в которые часто попадают начинающие.
Этот код проверяет, существует ли строка 'cats' как ключ в словаре numberOfPets. Если ключ существует, то вызов print() обращается к numberOfPets['cats'] как части сообщения для пользователя. Если ключ не существует, то другой вызов print() выводит строку без обращения к numberOfPets['cats'], поэтому исключение KeyError не выдается.
И наоборот, может потребоваться задать значение по умолчанию, если ключ не существует. Например, если словарь из numberOfPets не содержит ключа 'cats', команда numberOfPets['cats']+=10 приводит к ошибке KeyError. Можно добавить код, который проверяет возможное отсутствие ключа и задает значение по умолчанию: