Чистыйкод дляпродолжающи х
Скачать 7.85 Mb.
|
Э Л С В Е Й Г А Р Т 2022 PYTHON Ч И С Т Ы Й К О Д Д Л Я П Р О Д О Л Ж А Ю Щ И Х Э Л С В Е Й Г А Р Т 2022 PYTHON Ч И С Т Ы Й К О Д Д Л Я П Р О Д О Л Ж А Ю Щ И Х ББК 32.973.2-018 УДК 004.41 С24 Свейгарт Эл С24 Python. Чистый код для продолжающих. — СПб.: Питер, 2022. — 384 с.: ил. — (Серия «Библиотека программиста»). ISBN 978-5-4461-1852-6 Вы прошли обучающий курс программирования на Python или прочли несколько книг для начинающих. Что дальше? Как подняться над базовым уровнем, превратиться в крутого разработчика? «Python. Чистый код для продолжающих» — это не набор полезных советов и подсказок по написанию чистого кода. Вы узнаете о командной строке и других инструментах профессионального разработчика: сред- ствах форматирования кода, статических анализаторах и контроле версий. Вы научитесь настраивать среду разработки, давать имена переменным и функциям, делающие код удобочитаемым, грамотно комментировать и документировать ПО, оценивать быстродействие программ и сложность алгоритмов, познакомитесь с ООП. Такие навыки поднимут вашу ценность как программиста не только в Python, но и в любом другом языке. Ни одна книга не заменит реального опыта работы и не превратит вас из новичка в профессионала. Но «Чистый код для продолжающих» проведет вас чуть дальше по этому пути: вы научитесь создавать чистый, грамотный, читабельный, легко отлаживаемый код, который можно будет назвать истинно питоническим. 16+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.) ББК 32.973.2-018 УДК 004.41 Права на издание получены по соглашению с No Starch Press. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как на- дежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги. Издательство не несет ответственности за доступность материалов, ссылки на которые вы можете найти в этой книге. На момент подготовки книги к изданию все ссылки на интернет- ресурсы были действующими. ISBN 978-1593279660 англ. © 2021 by Al Sweigart. Beyond the Basic Stuff with Python: Best Practices for Writing Clean Code, ISBN 9781593279660, published by No Starch Press Inc. 245 8th Street, San Francisco, California United States 94103. Russian edition published under license by No Starch Press Inc. ISBN 978-5-4461-1852-6 © Перевод на русский язык ООО «Прогресс книга», 2022 © Издание на русском языке, оформление ООО «Прогресс книга», 2022 © Серия «Библиотека программиста», 2022 Краткое содержание Об авторе ........................................................18 О техническом редакторе ...........................................18 Благодарности ....................................................18 Введение .........................................................19 ЧАСТЬ I ПЕРВЫЕ ШАГИ Глава 1. Обработка ошибок и обращение за помощью ..................26 Глава 2. Подготовка среды и командная строка .........................40 ЧАСТЬ II ПЕРЕДОВЫЕ ПРАКТИКИ, ИНСТРУМЕНТЫ И МЕТОДЫ Глава 3. Форматирование кода при помощи Black ......................70 Глава 4. Выбор понятных имен .......................................85 Глава 5. Поиск запахов в коде .......................................95 Глава 6. Написание питонического кода ..............................113 Глава 7. Жаргон программистов ....................................135 Глава 8. Часто встречающиеся ловушки Python ........................164 Глава 9. Экзотические странности Python .............................185 Глава 10.Написание эффективных функций ...........................194 Глава 11.Комментарии, doc-строки и аннотации типов ..................216 6 Краткое содержание Глава 12. Git и организация программных проектов ....................235 Глава 13.Измерение быстродействия и анализ сложности алгоритмов .....264 Глава 14.Проекты для тренировки ..................................288 ЧАСТЬ III ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ PYTHON Глава 15. Объектно-ориентированное программирование и классы .......316 Глава 16. Объектно-ориентированное программирование и наследование .335 Глава 17.ООП в Python: свойства и dunder-методы .....................358 Оглавление Об авторе ......................................................18 О техническом редакторе .......................................18 Благодарности ..................................................18 Введение .......................................................19 Для кого написана эта книга и почему ...............................20 О книге ........................................................20 Часть I. Первые шаги ..........................................21 Часть II. Передовые практики, инструменты и методы ................21 Часть III. Объектно-ориентированный Python ......................22 Путешествие в мир программирования ..............................23 ЧАСТЬ I ПЕРВЫЕ ШАГИ Глава 1. Обработка ошибок и обращение за помощью ..................26 Как понять сообщения об ошибках Python ............................26 Анализ трассировки ..........................................27 Поиск сообщений об ошибках ..................................30 Предотвращение ошибок при помощи статического анализатора ........31 Как обратиться за помощью по программированию ....................33 Избегайте лишних разговоров, предоставляйте информацию заранее .34 Формулируйте свой вопрос как вопрос ...........................34 Задавайте вопросы на подходящем веб-сайте .....................34 Включите краткое описание вопроса в заголовок ...................34 Объясните, что должен делать ваш код ...........................35 Включите полное сообщение об ошибке ..........................36 Приведите полный код ........................................36 Правильно отформатируйте свой код ............................36 8 Оглавление Сообщите, что вы уже пытались сделать ..........................37 Опишите свою рабочую конфигурацию ..........................37 Примеры вопросов ..............................................38 Итоги .........................................................39 Глава 2.Подготовка среды и командная строка .........................40 Файловая система ...............................................40 Пути в Python ................................................41 Домашний каталог ...........................................42 Текущий рабочий каталог ......................................43 Абсолютные и относительные пути ...............................43 Программы и процессы ...........................................44 Командная строка ...............................................45 Открытие окна терминала .....................................46 Запуск программ из командной строки ...........................47 Аргументы командной строки ...................................48 Выполнение кода Python из командной строки с ключом -c ...........50 Выполнение программ Python из командной строки .................50 Запуск программы py.exe ......................................50 Выполнение команд из программы Python .........................51 Сокращение объема вводимого текста при помощи автозавершения ...51 Просмотр истории команд .....................................52 Часто используемые команды ..................................53 Переменные среды и PATH ........................................60 Просмотр переменных среды ...................................61 Переменная среды PATH .......................................62 Изменение переменной среды PATH в командной строке .............63 Постоянное включение папок в PATH в Windows ...................63 Постоянное включение папок в PATH в macOS и Linux ...............65 Запуск программ Python без командной строки .......................65 Запуск программ Python в Windows ..............................66 Запуск программ Python в macOS ...............................67 Запуск программ Python в Ubuntu Linux ...........................67 Итоги .........................................................68 Оглавление 9 ЧАСТЬ II ПЕРЕДОВЫЕ ПРАКТИКИ, ИНСТРУМЕНТЫ И МЕТОДЫ Глава 3. Форматирование кода при помощи Black ......................70 Как потерять друзей и настроить против себя коллег ...................70 Руководства по стилю и PEP 8 ......................................71 Горизонтальные отступы ..........................................72 Использование пробелов для создания отступов ...................72 Отступы в середине строки .....................................73 Вертикальные отступы ............................................76 Пример использования вертикальных отступов .....................77 Рекомендации по использованию вертикальных отступов ............78 Black: бескомпромиссная система форматирования кода ...............79 Установка Black ..............................................80 Запуск Black из командной строки ...............................80 Отключение Black для отдельных частей кода ......................83 Итоги .........................................................84 Глава 4. Выбор понятных имен .......................................85 Схемы регистра имен ............................................86 Соглашения об именах PEP 8 ......................................86 Длина имен ....................................................87 Выбирайте имена, пригодные для поиска ............................90 Избегайте шуток, каламбуров и культурных отсылок ...................91 Не заменяйте встроенные имена ...................................92 Худшие из возможных имен .......................................93 Итоги .........................................................93 Глава 5. Поиск запахов в коде .......................................95 Дублирование кода ..............................................95 «Магические» числа .............................................97 Закомментированный и мертвый код ...............................100 Отладочный вывод ..............................................101 Переменные с числовыми суффиксами .............................102 Классы, которые должны быть функциями или модулями ...............103 10 Оглавление Списковые включения внутри списковых включений ...................104 Пустые блоки except и плохие сообщения об ошибках .................106 Мифы о запахах кода ...........................................107 Миф: функции должны содержать только одну команду return в самом конце ..............................................108 Миф: функции должны содержать не более одной команды try .......108 Миф: аргументы-флаги нежелательны ...........................109 Миф: глобальные переменные нежелательны .....................110 Миф: комментарии излишни ...................................111 Итоги ........................................................112 Глава 6.Написание питонического кода ..............................113 «Дзен Python» ..................................................113 Как полюбить значимые отступы ...................................117 Использование модуля timeit для оценки быстродействия ...............118 Неправильное использование синтаксиса ...........................120 Использование enumerate() вместо range() .......................120 Использование команды with вместо open() и close() ...............121 Использование is для сравнения с None вместо == .................122 Форматирование строк .........................................123 Использование необработанных строк, если строка содержит много символов \ (обратный слэш) .............................123 Форматирование с использованием F-строк ......................124 Поверхностное копирование списков ..............................125 Питонические способы использования словарей .....................126 Использование get() и setdefault() со словарями ...................127 Использование collections.defaultdict для значений по умолчанию .....128 Использование словарей вместо команды switch ..................129 Условные выражения: «некрасивый» тернарный оператор Python ........130 Работа со значениями переменных ................................132 Сцепление операторов присваивания и сравнения ................132 Проверка того, что переменная содержит одно из нескольких значений 133 Итоги ........................................................133 Оглавление 11 Глава 7. Жаргон программистов ....................................135 Определения ..................................................135 Язык Python и интерпретатор Python .............................136 Сборка мусора .............................................137 Литералы ..................................................137 Ключевые слова ............................................138 Объекты, значения, экземпляры и идентичность ...................139 Элементы ..................................................143 Изменяемость и неизменяемость ...............................143 Индексы, ключи и хеш-коды ...................................146 Контейнеры, последовательности, отображения и разновидности множеств ..................................................149 Dunder-методы, или магические методы ..........................150 Модули и пакеты ............................................150 Вызываемые объекты и первоклассные объекты ...................151 Частые ошибки при использовании терминов ........................152 Команды и выражения ........................................152 Блок, секция и тело ..........................................153 Переменные и атрибуты ......................................154 Функции и методы ...........................................155 Итерируемые объекты и итераторы .............................155 Синтаксические ошибки, ошибки времени выполнения и семантические ошибки ......................................157 Параметры и аргументы ......................................159 Явные и неявные преобразования типов .........................159 Свойства и атрибуты .........................................159 Байт-код и машинный код .....................................160 Сценарии и программы, языки сценариев и языки программирования ..........................................161 Библиотеки, фреймворки, SDK, ядра и API .......................161 Итоги ........................................................162 Дополнительные ресурсы ........................................163 12 Оглавление Глава 8.Часто встречающиеся ловушки Python ........................164 Не добавляйте и не удаляйте элементы из списка в процессе перебора ...164 Не копируйте изменяемые значения без copy.copy() и copy.deepcopy() ...171 Не используйте изменяемые значения для аргументов по умолчанию .....174 Не создавайте строки посредством конкатенации ....................176 Не рассчитывайте, что sort() выполнит сортировку по алфавиту ..........178 Не рассчитывайте на идеальную точность чисел с плавающей точкой .....179 Не объединяйте операторы != в цепочку ............................182 Не забудьте запятую в кортежах из одного элемента ..................183 Итоги ........................................................183 Глава 9.Экзотические странности Python .............................185 Почему 256 — это 256, а 257 — не 257 ............................185 Интернирование строк ..........................................187 Фиктивные операторы инкремента и декремента в языке Python .........188 Все или ничего .................................................189 Логические значения как целые числа ..............................190 Сцепление разных видов операторов ..............................192 Антигравитация в Python .........................................193 Итоги ........................................................193 Глава 10. Написание эффективных функций ...........................194 Имена функций ................................................194 Плюсы и минусы размера функций ................................195 Параметры и аргументы функций ..................................198 Аргументы по умолчанию .....................................198 Использование * и ** для передачи аргументов функции ...........199 Использование * при создании вариадических функций ............201 Использование ** при создании вариадических функций ...........203 Использование * и ** для создания функций-оберток ..............205 Функциональное программирование ..............................206 Побочные эффекты ..........................................206 Функции высшего порядка ....................................209 Лямбда-функции ............................................209 Оглавление 13 Отображение и фильтрация со списковыми включениями ...........210 Возвращаемые значения всегда должны иметь один тип данных .........212 Выдача исключений и возвращение кодов ошибок ....................214 Итоги ........................................................215 |