Секреты Python Pro

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

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

Author(s): Дейн Хиллард
Series: Библиотека программиста
Edition: 1
Publisher: Питер
Year: 2021

Language: Russian
Commentary: Vector PDF
Pages: 320
City: СПб.
Tags: Python; Distributed Systems; Design Patterns; High Performance; Design; Refactoring; Object-Oriented Programming; Programming Style; Unit Testing; Integration Testing; Regression Testing; PyTest; Testing; Performance Testing; Encapsulation; Abstraction; Acceptance Testing; Load Testing; Code Extensibility; Code Flexibility; Inheritance; Coupling; Test-Driven Development

Предисловие
Благодарности
О книге
Для кого эта книга
Структура книги
О коде
Форум liveBook
Об авторе
Об обложке
От издательства
Часть I. Почему это важно?
Глава 1. Крупный план
1.1. Python — язык для корпоративных приложений
1.1.1. Времена меняются
1.1.2. Что мне нравится в Python
1.2. Python — язык для обучения
1.3. Дизайн — это процесс
1.3.1. Пользовательский опыт
1.3.2. Вы уже были здесь раньше
1.4. Дизайн обеспечивает высокое качество ПО
1.4.1. Соображения по дизайну ПО
1.4.2. Органически выращенное ПО
1.5. Когда нужно уделять время дизайну
1.6. Новые начинания
1.7. Дизайн демократичен
1.7.1. Хладнокровие
1.8. Как пользоваться этой книгой
Итоги
Часть II. Основы проектирования
Глава 2. Разделение ответственности
2.1. Организация пространства имен
2.1.1. Пространства имен и инструкция import
2.1.2. Лики импортирования
2.1.3. Пространства имен предотвращают коллизии
2.2. Иерархия разделения в Python
2.2.1. Функции
2.2.2. Классы
2.2.3. Модули
2.2.4. Пакеты
Итоги
Глава 3. Абстракция и инкапсуляция
3.1. Что такое абстракция?
3.1.1. Черный ящик
3.1.2. Абстракция подобна луковице
3.1.3. Абстракция упрощает
3.1.4. Декомпозиция обеспечивает возможность абстракции
3.2. Инкапсуляция
3.2.1. Конструкции инкапсуляции в Python
3.2.2. Ожидания приватности в Python
3.3. Попробуйте сами
3.3.1. Рефакторинг
3.4. Стили программирования тоже являются абстракцией
3.4.1. Процедурное программирование
3.4.2. Функциональное программирование
3.4.3. Декларативное программирование
3.5. Типизация, наследование и полиморфизм
3.6. Распознавание неправильной абстракции
3.6.1. Как корове седло
3.6.2. Умник с топором
Итоги
Глава 4. Создание дизайна для производительности
4.1. Сквозь время и пространство
4.1.1. Сложность немного… сложна
4.1.2. Временная сложность
4.1.3. Пространственная сложность
4.2. Производительность и типы данных
4.2.1. Типы данных для постоянного времени
4.2.2. Типы данных для линейного времени
4.2.3. Пространственная сложность операций на типах данных
4.3. Работоспособность, правильность и быстрота
4.3.1. Сделайте работоспособным
4.3.2. Сделайте правильным
4.3.3. Сделайте быстрым
4.4. Инструменты
4.4.1. timeit
4.4.2. Профилирование ЦП
4.5. Попробуйте сами
Итоги
Глава 5. Тестирование ПО
5.1. Что такое тестирование ПО?
5.1.1. Соответствует ли содержимое этикетке?
5.1.2. Суть функционального тестирования
5.2. Подходы к функциональному тестированию
5.2.1. Ручное тестирование
5.2.2. Автоматизированное тестирование
5.2.3. Приемочное тестирование
5.2.4. Юнит-тестирование
5.2.5. Интеграционное тестирование
5.2.6. Пирамида тестирования
5.2.7. Регрессионное тестирование
5.3. Констатация фактов
5.4. Юнит-тестирование с помощью unittest
5.4.1. Организация тестов с помощью unittest
5.4.2. Выполнение тестов с помощью unittest
5.4.3. Написание первого теста с помощью unittest
5.4.4. Написание первого интеграционного теста с помощью unittest
5.4.5. Тестовые дублеры
5.4.6. Попробуйте сами
5.4.7. Написание дополнительных тестов
5.5. Тестирование с помощью фреймворка pytest
5.5.1. Организация тестов с помощью фреймворка pytest
5.5.2. Конвертирование тестов unittest в pytest
5.6. За пределами функционального тестирования
5.6.1. Тестирование производительности
5.6.2. Нагрузочное тестирование
5.7. Разработка на основе тестов: пример
5.7.1. Это образ мышления
5.7.2. Это философия
Итоги
Часть III. Организация крупных систем
Глава 6. Разделение ответственности на практике
6.1. Приложение командной строки для создания закладок
6.2. обзор приложения Bark
6.2.1. Выгоды от разделения: реприза
6.3. Первоначальное разделение ответственности
6.3.1. Слой постоянства данных
6.3.2. Слой бизнес-логики
6.3.3. Слой визуализации
Итоги
Глава 7. Расширяемость и гибкость
7.1. Что такое расширяемый код?
7.1.1. Добавление новых форм поведения
7.1.2. Изменение существующего поведения
7.1.3. Слабая сопряженность
7.2. Решения проблемы жесткости
7.2.1. Отпустить на свободу: инверсия управления
7.2.2. Дьявол в мелочах: опора на интерфейсы
7.2.3. Борьба с энтропией: принцип надежности
7.3. Упражнение на растяжку
Итоги
Глава 8. Правила (и исключения) наследования
8.1. Наследование раньше
8.1.1. Серебряная пуля
8.1.2. Трудности иерархий
8.2. Наследование сейчас
8.2.1. Зачем нужно наследование?
8.2.2. Подстановка
8.2.3. Идеальный для наследования вариант использования
8.3. Наследование в Python
8.3.1. Проверка типов
8.3.2. Обращение к суперклассу
8.3.3. Множественное наследование и порядок разрешения методов
8.3.4. Абстрактные базовые классы
8.4. Наследование и композиция в приложении Bark
8.4.1. Рефакторинг для использования абстрактного базового класса
8.4.2. Окончательная проверка работы с наследованием
Итоги
Глава 9. Поддержание компактности
9.1. Насколько большим должен быть класс/функция/модуль?
9.1.1. Физический размер
9.1.2. Ограниченная ответственность
9.1.3. Сложность кода
9.2. Разложение сложности
9.2.1. Извлечение конфигурационной информации
9.2.2. Извлечение функций
9.3. Декомпозиция классов
9.3.1. Сложность инициализации
9.3.2. Извлечение классов и переадресация вызовов
Итоги
Глава 10. Достижение слабой сопряженности
10.1. Определение сопряженности
10.1.1. Сопряженность
10.1.2. Тесная сопряженность
10.1.3. Слабая сопряженность
10.2. Распознавание сопряженности
10.2.1. Излишняя зависимость
10.2.2. Стрельба дробью
10.2.3. Дырявая абстракция
10.3. Сопряженность в приложении Bark
10.4. Решение проблемы сопряженности
10.4.1. Передача сообщений пользователям
10.4.2. Постоянство хранения закладок
10.4.3. Попробуйте сами
Итоги
Часть IV. Что дальше?
Глава 11. Только вперед
11.1. Что теперь?
11.1.1. Разработайте план
11.1.2. Исполните план
11.1.3. Отслеживайте свой прогресс
11.2. Паттерны проектирования
11.2.1. Взлеты и падения паттернов в Python
11.2.2. С чего начать
11.3. Распределенные системы
11.3.1. Режимы сбоя в распределенных системах
11.3.2. Урегулирование состояния приложения
11.3.3. С чего начать
11.4. Погружение в Python
11.4.1. Питоновский стиль
11.4.2. Языковые средства являются паттернами
11.4.3. С чего начать
11.5. Что вы узнали
11.5.1. Путешествие туда и обратно: рассказ разработчика
11.5.2. Выход из системы
Итоги
Приложение. Установка языка Python
A.1. Какую версию Python использовать?
A.2. «Системный» Python
A.3. Установка других версий Python
A.3.1. Скачайте официальный Python
A.3.2. Скачать с помощью Anaconda
A.4. Проверка установки