Python. Чистый код для продолжающих - Эл Свейгарт - E-Book

Python. Чистый код для продолжающих E-Book

Эл Свейгарт

0,0

Beschreibung

Вы прошли обучающий курс программирования на Python или прочли несколько книг для начинающих. Что дальше? Как подняться над базовым уровнем, превратиться в крутого разработчика? «Python. Чистый код для продолжающих» — это не набор полезных советов и подсказок по написанию чистого кода. Вы узнаете о командной строке и других инструментах профессионального разработчика: средствах форматирования кода, статических анализаторах и контроле версий. Вы научитесь настраивать среду разработки, давать имена переменным и функциям, делающие код удобочитаемым, грамотно комментировать и документировать ПО, оценивать быстродействие программ и сложность алгоритмов, познакомитесь с ООП. Такие навыки поднимут вашу ценность как программиста не только в Python, но и в любом другом языке. Ни одна книга не заменит реального опыта работы и не превратит вас из новичка в профессионала. Но «Чистый код для продолжающих» проведет вас чуть дальше по этому пути: вы научитесь создавать чистый, грамотный, читабельный, легко отлаживаемый код, который можно будет назвать истинно питоническим.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 498

Veröffentlichungsjahr: 2023

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Эл Свейгарт
Python. Чистый код для продолжающих

Переводчик Е. Матвеев

Эл Свейгарт

Python. Чистый код для продолжающих. — СПб.: Питер, 2022.

ISBN 978-5-4461-1852-6

© ООО Издательство "Питер", 2022

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

Оглавление

Об авторе
О техническом редакторе
Благодарности
Введение
Для кого написана эта книга и почему
О книге
Путешествие в мир программирования
Часть I. Первые шаги
1. Обработка ошибок и обращение за помощью
Как понять сообщения об ошибках Python
Предотвращение ошибок при помощи статического анализатора
Как обратиться за помощью по программированию
Примеры вопросов
Итоги
2. Подготовка среды и командная строка
Файловая система
Программы и процессы
Командная строка
Переменные среды и PATH
Запуск программ Python без командной строки
Итоги
Часть II. Передовые практики, инструменты и методы
3. Форматирование кода при помощи Black
Как потерять друзей и настроить против себя коллег
Руководства по стилю и PEP 8
Горизонтальные отступы
Вертикальные отступы
Black: бескомпромиссная система форматирования кода
Итоги
4. Выбор понятных имен
Схемы регистра имен
Соглашения об именах PEP 8
Длина имен
Выбирайте имена, пригодные для поиска
Избегайте шуток, каламбуров и культурных отсылок
Не заменяйте встроенные имена
Худшие из возможных имен
Итоги
5. Поиск запахов в коде
Дублирование кода
«Магические» числа
Закомментированный и мертвый код
Отладочный вывод
Переменные с числовыми суффиксами
Классы, которые должны быть функциями или модулями
Списковые включения внутри списковых включений
Пустые блоки except и плохие сообщения об ошибках
Мифы о запахах кода
Итоги
6. Написание питонического кода
«Дзен Python»
Как полюбить значимые отступы
Использование модуля timeit для оценки быстродействия
Неправильное использование синтаксиса
Форматирование строк
Поверхностное копирование списков
Питонические способы использования словарей
Условные выражения: «некрасивый» тернарный оператор Python
Работа со значениями переменных
Итоги
7. Жаргон программистов
Определения
Частые ошибки при использовании терминов
Итоги
Дополнительные ресурсы
8. Часто встречающиеся ловушки Python
Не добавляйте и не удаляйте элементы из списка в процессе перебора
Не копируйте изменяемые значения без copy.copy() и copy.deepcopy()
Не используйте изменяемые значения для аргументов по умолчанию
Не создавайте строки посредством конкатенации
Не рассчитывайте, что sort() выполнит сортировку по алфавиту
Не рассчитывайте на идеальную точность чисел с плавающей точкой
Не объединяйте операторы != в цепочку
Не забудьте запятую в кортежах из одного элемента
Итоги
9. Экзотические странности Python
Почему 256 — это 256, а 257 — не 257
Интернирование строк
Фиктивные операторы инкремента и декремента в языке Python
Все или ничего
Логические значения как целые числа
Сцепление разных видов операторов
Антигравитация в Python
Итоги
10. Написание эффективных функций
Имена функций
Плюсы и минусы размера функций
Параметры и аргументы функций
Функциональное программирование
Возвращаемые значения всегда должны иметь один тип данных
Выдача исключений и возвращение кодов ошибок
Итоги
11. Комментарии, doc-строки и аннотации типов
Комментарии
Doc-строки
Аннотации типов
Итоги
12. Git и организация программных проектов
Коммиты и репозитории
Создание новых проектов Python с использованием Cookiecutter
Установка Git
Работа с Git
Создание репозитория Git на вашем компьютере
Просмотр журнала коммитов
Восстановление старых изменений
GitHub и команда git push
Итоги
13. Измерение быстродействия и анализ сложности алгоритмов
Модуль timeit
Профилировщик cProfile
Анализ алгоритмов с использованием нотации «O-большое»
Порядки нотации «О-большое»
Определение порядка сложности нотации «О-большое» вашего кода
Итоги
14. Проекты для тренировки
Головоломка «Ханойская башня»
Игра «Четыре в ряд»
Итоги
Часть III. Объектно-ориентированный Python
15. Объектно-ориентированное программирование и классы
Аналогия из реального мира: заполнение форм
Создание объектов на базе классов
Создание простого класса: WizCoin
Функция type() и атрибут __qualname__
Примеры программирования с применением ООП и без него: «Крестики-нолики»
Трудности проектирования классов для проектов реального мира
Итоги
16. Объектно-ориентированное программирование и наследование
Как работает наследование
Функции isinstance() и issubclass()
Методы классов
Атрибуты классов
Статические методы
Когда использовать объектно-ориентированные статические средства и средства уровня классов
Термины объектно-ориентированного программирования
Когда наследование не используется
Множественное наследование
Порядок разрешения методов
Итоги
17. ООП в Python: свойства и dunder-методы
Свойства
Dunder-методы Python
Итоги

Моему племяннику Джеку

Об авторе

Эл Свейгарт — разработчик и автор технической литературы, живет в Сиэтле. Python — его любимый язык программирования, он разработал для Python несколько модулей с открытым кодом. Его другие книги доступны бесплатно на условиях лицензии Creative Commons на его веб-сайте https://www.inventwithpython.com/.

Кошка автора книги — Зофи — весит 5 килограммов.

О техническом редакторе

Кеннет Лав (Kenneth Love) — программист, преподаватель и организатор конференций. Он — соавтор Django и член сообщества PSF (Python Software Foundation). В настоящее время работает техническим руководителем и инженером-программистом в O’Reilly Media.

Благодарности

Несправедливо, что на обложке этой книги стоит только мое имя. Эта книга никогда не появилась бы без поддержки многих людей. Хочу поблагодарить своего издателя, Билла Поллока (Bill Pollock), а также всех моих редакторов: Фрэнсис Со (Frances Saux), Энни Чой (Annie Choi), Мег Снеерингер (Meg Sneeringer) и Яна Кэша (Jan Cash). Также хочу сказать спасибо редактору Морин Форис (Maureen Forys), выпускающему редактору Энн Мэри Уокер (Anne Marie Walker) и исполнительному редактору No Starch Press Барбаре Йен (Barbara Yien). Я очень признателен Джошу Эллингсону (Josh Ellingson) за еще одну замечательную иллюстрацию для обложки. Моя благодарность техническому редактору Кеннету Лаву (Kenneth Love) и всем остальным замечательным друзьям, с которыми я познакомился в сообществе Python.

Введение

Hello, world! В конце 1990-х я только начинал программировать, мечтал стать настоящим хакером и листал последние выпуски журнала «2600: The Hacker Quarterly». Однажды я набрался смелости и посетил ежемесячное сборище программистов в моем городе; меня поразило, насколько знающими казались все окружающие. (Позднее я понял, что у многих самоуверенности было больше, чем реальных знаний.) Весь вечер я поддакивал тому, что говорили другие, стараясь не отставать от них. Покидая встречу, я твердо вознамерился посвятить все свободное время изучению компьютеров, программирования и сетевой безопасности, чтобы достойно поучаствовать во встрече в следующем месяце.

Но на следующем сборище я все так же кивал и чувствовал себя болваном по сравнению со всеми остальными. Я снова решил: надо учиться, чтобы стать «достаточно умным» и не отставать от окружающих. Месяц за месяцем я корпел над книгами, но всегда чувствовал себя отстающим. Я начал осознавать, насколько необъятна эта область, и беспокоился, что никогда не буду знать достаточно.

Я знал о программировании больше, чем мои друзья, но безусловно недостаточно для того, чтобы получить должность разработчика. В 1990-е годы Google, YouTube и «Википедии» еще не было. Но даже если бы эти ресурсы были доступны, мне было бы сложно пользоваться ими: я просто не знал, что изучать дальше. Но все это время я учился писать программу «Hello, world!» на разных языках программирования и по-прежнему осознавал, что толком не двигаюсь вперед. Я не понимал, как подняться выше базового уровня.

Разработка вовсе не ограничивается циклами и функциями. Но после того, как вы ознакомитесь со вводным курсом или прочитаете книгу по программированию начального уровня, поиск новой информации приведет вас к очередному учебнику, посвященному написанию «Hello, world!». Программисты часто называют этот период «пустыней отчаяния»: время, когда вы бесцельно блуждаете по разным учебным материалам, ощущая, что топчетесь на месте. Вы превзошли начальный уровень, но вам еще не хватает опыта для более сложных тем.

Блуждающие в пустыне испытывают сильный «синдром самозванца». Вы не чувствуете себя «настоящим» программистом и не умеете создавать такой код, как «настоящие» программисты. Я писал эту книгу именно для такой аудитории. Если вы изучили основы Python, моя книга поможет вам стать более эффективным разработчиком и преодолеть отчаяние.

Для кого написана эта книга и почему

Книга предназначена для читателей, которые изучили базовый курс языка Python и хотят узнать больше. Базовые знания могут дать моя предыдущая книга «Automate the Boring Stuff with Python» (No Starch Press, 2019)1, книга Эрика Мэтиза (Eric Matthes) «Python Crash Course» (No Starch Press, 2019)2 или какой-нибудь сетевой курс.

Возможно, эти учебники вызвали у вас интерес к программированию, но вам все равно не хватает знаний. Если вы чувствуете, что еще не достигли профессионального уровня, и не знаете, как его достичь, то эта книга написана для вас. А может быть, вы знакомы с другим языком программирования, а теперь хотите переключиться на Python и его экосистему без изучения основ уровня «Hello, world!». В таком случае вам наверняка не захочется читать сотни страниц с объяснением базового синтаксиса; вместо этого достаточно просмотреть статью «Learn Python in Y Minutes» (https://learnxinyminutes.com/docs/python/) или страницу Эрика Мэтиза (Eric Matthes) «Python Crash Course — Cheat Sheet» (https://ehmatthes.github.io/pcc/cheatsheets/README.html).

О книге

Книга более глубоко знакомит вас с синтаксисом Python, но не ограничивается этим. Я рассказываю о командной строке и средствах командной строки, используемых профессиональными разработчиками: системах форматирования кода, статических анализаторах и системах контроля версий. Я объясняю, какие аспекты делают ваш код более удобочитаемым и как писать более чистый и понятный код. В книге представлен ряд программ, чтобы вы увидели применение этих принципов в реальном коде. И хотя это не учебник компьютерной теории, здесь также рассматривается анализ алгоритмов в нотации «О-большое» и объектно-ориентированная парадигма.

Никакая книга не превратит вас в профессионального разработчика, но я надеюсь, что мой труд расширит ваши познания в этой области. Я представлю некоторые темы, которые обычно познаются лишь на опыте, полученном тяжелой практикой. Прочитав эту книгу, вы приобретете прочную основу, которая позволит вам с большей уверенностью браться за новые задачи.

И хотя я рекомендую читать главы этой книги последовательно, ничто не мешает вам переходить к тем главам, которые вас интересуют больше.

Часть I. Первые шаги

• Глава 1. Обработка ошибок и обращение за помощью. Вы узнаете, как эффективно задавать вопросы и самостоятельно находить ответы. Также вы научитесь читать сообщения об ошибках и освоите этикет обращения за помощью в интернете.

• Глава 2. Подготовка среды и командная строка. О том, как работать в режиме командной строки и как настроить среду разработки и переменную PATH.

Часть II. Передовые практики, инструменты и методы

• Глава 3. Форматирование кода при помощи Black. В этой главе рассматривается руководство по стилю PEP 8 и форматирование кода для улучшения его удобочитаемости. Вы узнаете, как автоматизировать этот процесс при помощи инструмента форматирования кода Black.

• Глава 4. Выбор понятных имен. Правила выбора имен переменных и функций для улучшения удобочитаемости кода.

• Глава 5. Поиск запахов в коде. Некоторые потенциальные тревожные признаки, которые могут указывать на наличие ошибок в вашем коде.

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

• Глава 7. Жаргон программистов. Технические термины, используемые в области программирования, и термины, которые нередко вызывают путаницу.

• Глава 8. Часто встречающиеся ловушки Python. Типичные источники недоразумений и ошибок в языке Python, способы их исправления и стратегии программирования, которых лучше избегать.

• Глава 9. Экзотические странности Python. Некоторые экзотические особенности языка Python, включая интернирование строк и пасхалки, которые могут остаться незамеченными. Разобравшись с тем, почему некоторые типы данных и операторы ведут себя неожиданным образом, вы начнете лучше понимать, как работает Python.

• Глава 10. Написание эффективных функций. Глава рассказывает, как структурировать ваши функции для достижения наибольшей практичности и удобочитаемости. Вы узнаете о синтаксисе аргументов * и **, о достоинствах и недостатках больших и малых функций и средствах функционального программирования — таких как лямбда-функции.

• Глава 11. Комментарии, doc-строки и аннотации типов. Вы узнаете, насколько важны части вашей программы, не содержащие программного кода, и каково их влияние на сопровождение, с какой частотой следует писать комментарии и doc-строки и как сделать их более содержательными. Также в главе обсуждаются аннотации типов и использование статических анализаторов (таких как MyPy) для выявления ошибок.

• Глава 12. Git и организация программных проектов. Система контроля версий Git предназначена для записи истории изменений, вносимых в исходный код, и восстановления предыдущих версий работы или определения точки, в которой ошибка появилась впервые. Также я немного расскажу о структурировании файлов с кодом ваших проектов с использованием программы Cookiecutter.

• Глава 13. Измерение быстродействия и анализ сложности алгоритмов. В этой главе рассказано, как объективно измерить скорость выполнения вашего кода при помощи модулей timeit и cProfile. Кроме того, мы рассмотрим нотацию «О-большое» и способы прогнозирования снижения быстродействия кода с ростом объема обрабатываемых данных.

• Глава 14. Проекты для тренировки. Я расскажу о нескольких полезных методах, а затем с их помощью мы напишем пару игр командной строки: головоломку с перемещением дисков «Ханойская башня» и классическую игру «Четыре в ряд» для двух игроков.

Часть III. Объектно-ориентированный Python

• Глава 15. Объектно-ориентированное программирование и классы. Здесь мы определим роль объектно-ориентированного программирования (ООП), которое часто понимают неправильно. Многие разработчики злоупотребляют средствами ООП в своем коде, потому что считают, что так поступают все, но это лишь усложняет исходный код. Вы научитесь использовать классы, но что еще важнее, вы узнаете, когда следует и когда не следует их применять.

• Глава 16. Объектно-ориентированное программирование и наследование. Наследование классов и его полезность для повторного использования кода.

• Глава 17. ООП в Python: свойства и dunder-методы. Средства объектно-ориентированного проектирования, специфические для Python: свойства, dunder-методы и перегрузка операторов.

Путешествие в мир программирования

Попытки новичка стать профессиональным программистом часто выглядят чем-то вроде попытки напиться из пожарного шланга. При таком изобилии ресурсов вы начинаете беспокоиться, что тратите время на неэффективные учебники.

После того как вы прочтете эту книгу (или даже во время чтения), я рекомендую ознакомиться со следующими вводными материалами.

• «Python Crash Course» (No Starch Press, 2019) Эрика Мэтиза (Eric Matthes) 3 — книга для начинающих, но благодаря ее ориентации на конкретные проекты даже опытный программист почувствует вкус использования библиотек Python Pygame, matplotlib и Django.

• В своей книге «Impractical Python Projects» (No Starch Press, 2018) Ли Воган (Lee Vaughan)4 проектным методом совершенствует ваши навыки Python. Под его руководством вы построите несколько занимательных программ, которые станут для вас отличной тренировкой.

• «Serious Python» (No Starch Press, 2018) Джульена Данжу (Julien Danjou)5 описывает, что надо предпринять любителю-энтузиасту для превращения в квалифицированного разработчика, который применяет передовые практики и пишет хорошо масштабируемый код.

Впрочем, технические аспекты Python — всего лишь одна из его сильных сторон. Язык программирования сформировал разностороннее сообщество, усилиями которого была создана удобная, доступная документация и система поддержки, превосходящая любую другую экосистему. На ежегодной конференции PyCon наряду со многими региональными конференциями предлагаются многочисленные лекции для программистов разных уровней квалификации. Организаторы PyCon предоставляют бесплатный доступ к этим материалам на https://pyvideo.org/. На странице Tags можно легко найти доклады по темам, интересующим вас.

Если вы захотите глубже изучить расширенные возможности синтаксиса и стандартной библиотеки Python, я рекомендую следующие книги:

• «Effective Python» (Addison-Wesley Professional, 2019) Бретта Слаткина (Brett Slatkin)6 — впечатляющая подборка передовых практик и языковых средств Python;

• «Python Cookbook» (O’Reilly Media, 2013) Дэвида Бизли (David Beazley) и Брайана К. Джонса (Brian K. Jones)7 — обширный список фрагментов кода, которые помогут обновить репертуар любого начинающего разработчика Python;

• «Fluent Python» (O’Reilly Media, 2021) Лучано Рамальо (Luciano Ramalho)8 — капитальный труд для исследования тонкостей языка Python. И хотя почти 800-страничный том выглядит устрашающе, вы не пожалеете о потраченном времени.

Желаю удачи в вашем путешествии в мир программирования. Итак, за дело!

1 Свейгарт Э. Автоматизация рутинных задач с помощью Python.

2Мэтиз Э. Изучаем Python: программирование игр, визуализация данных, веб-приложения. 3-е изд. — СПб.: Питер, 2017.

3Мэтиз Э. Изучаем Python: программирование игр, визуализация данных, веб-прило­жения. 3-е изд. — СПб.: Питер.

4Воган Л. «Непрактичный» Python. Занимательные проекты для тех, кто хочет поумнеть.

5Данжу Дж. Путь Python. Черный пояс по разработке, масштабированию, тестированию и развертыванию. — СПб.: Питер.

6Слаткин Б. Секреты Python. 59 рекомендаций по написанию эффективного кода.

7Бизли Д., Джонс Б. Python. Книга рецептов.

8Рамальо Л. Python. К вершинам мастерства.

Часть I. Первые шаги