Во всех языках программирования существуют собственные приемы и «передовые» практики. В этой главе я рассказал о конкретных способах написания питонического кода, которые создали программисты для оптимального использования синтаксиса 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, а также даны рекомендации относительно того, как писать более питонический код. В следующей главе рассматриваются некоторые проблемы и ловушки, в которые часто попадают начинающие.