Предисловие…………………………………………………………………………………………… 13
Почему именно Python?…………………………………………………………………………………………………………….. 13
Почему эта книга?……………………………………………………………………………………………………………………… 14
Использованные программные продукты……………………………………………………………………………….. 14
Типографские соглашения………………………………………………………………………………………………………… 15
Часть I. Язык Python: основные инструменты………………….. 17
Урок 1. Введение в Python, часть 1…………………………………………………………. 19
1.1. Интерактивный режим Python……………………………………………………………………………………………. 19
1.2. Операторы. Приоритет операторов. Скобки……………………………………………………………………. 20
1.3. Функции……………………………………………………………………………………………………………………………….. 23
1.4. Переменные. Присваивание……………………………………………………………………………………………….. 24
1.5. Типы данных……………………………………………………………………………………………………………………….. 26
1.5.1. Числа — целые и вещественные………………………………………………………………………………. 26
1.5.2. Строки………………………………………………………………………………………………………………………… 27
1.5.3. Списки………………………………………………………………………………………………………………………… 28
1.5.4. Кортежи……………………………………………………………………………………………………………………… 29
1.5.5. Словари……………………………………………………………………………………………………………………… 29
1.6. Стандартная библиотека. Модули. Импорт…………………………………………………………………….. 30
1.7. Объекты и классы……………………………………………………………………………………………………………….. 32
1.7.1. Введение в объекты и классы…………………………………………………………………………………… 32
1.7.2. Объектная природа Python………………………………………………………………………………………. 33
1.8. Программные ошибки и сообщения о них………………………………………………………………………… 34
1.9. Что еще следует знать о Python в целом, часть 1…………………………………………………………….. 35
Урок 2. Введение в Python, часть 2…………………………………………………………. 38
2.1. Работа с данными разных типов……………………………………………………………………………………….. 38
2.1.1. Выяснение типа данных, к которому относится значение……………………………………. 38
2.1.2. Преобразование значения в другой тип данных……………………………………………………. 39
2.2. Написание программ на Python………………………………………………………………………………………… 39
2.2.1. Ввод данных……………………………………………………………………………………………………………… 40
2.2.2. Вывод данных…………………………………………………………………………………………………………… 40
2.2.3. Написание программ в среде IDLE Shell………………………………………………………………… 41
2.2.4. Альтернативные инструменты для написания программ……………………………………… 44
2.2.5. Комментарии…………………………………………………………………………………………………………….. 45
2.2.6. Правила набора программного кода на Python…………………………………………………….. 45
2.2.7. Сообщения об ошибках в коде программ……………………………………………………………….. 47
2.3. Что еще следует знать о Python в целом, часть 2…………………………………………………………….. 47
Урок 3. Логический тип данных, управляющие выражения и блоки…….. 49
3.1. Логический тип данных……………………………………………………………………………………………………… 49
3.1.1. Введение в логический тип. Операторы сравнения. Условия……………………………….. 49
3.1.2. Логические операторы……………………………………………………………………………………………… 50
3.2. Выражение ветвления…………………………………………………………………………………………………………. 51
3.3. Блоки. Пустой оператор…………………………………………………………………………………………………….. 53
3.3.1. Как набираются выражения, содержащие блоки?………………………………………………… 54
3.4. Выражение выбора…………………………………………………………………………………………………………….. 55
3.5. Циклы. Цикл с условием……………………………………………………………………………………………………… 56
3.6. Управление циклами…………………………………………………………………………………………………………… 58
3.6.1. Переход на следующую итерацию…………………………………………………………………………. 58
3.6.2. Прерывание цикла…………………………………………………………………………………………………….. 58
3.7. Автоматическое преобразование типов в условиях управляющих выражений…………… 59
3.8. Оператор присваивания в составе выражения…………………………………………………………………. 59
3.9. Что еще следует знать о блоках и не только…………………………………………………………………….. 60
3.10. Самостоятельные упражнения………………………………………………………………………………………… 61
Урок 4. Числа и строки………………………………………………………………………….. 62
4.1. Числа — целые и вещественные………………………………………………………………………………………… 62
4.1.1. Запись чисел……………………………………………………………………………………………………………… 62
4.1.2. Преобразование значений в числа………………………………………………………………………….. 63
4.1.3. Обработка чисел……………………………………………………………………………………………………….. 64
4.1.3.1. Арифметические операции…………………………………………………………………………. 64
4.1.3.2. Алгебраические и тригонометрические операции……………………………………. 65
4.1.3.3. Генерирование псевдослучайных чисел…………………………………………………… 66
4.1.4. Сравнение чисел……………………………………………………………………………………………………….. 67
4.1.5. Потери точности при вычислении…………………………………………………………………………… 68
4.2. Строки………………………………………………………………………………………………………………………………….. 68
4.2.1. Создание строк………………………………………………………………………………………………………….. 68
4.2.1.1. Специальные символы………………………………………………………………………………… 69
4.2.2. Преобразование значений в строки………………………………………………………………………… 70
4.2.3. Обработка строк……………………………………………………………………………………………………….. 70
4.2.3.1. Извлечение символов, срезов и перебор. Цикл перебора…………………………. 70
4.2.3.2. Простейшие операции над строками…………………………………………………………. 72
4.2.3.3. Преобразование строк………………………………………………………………………………… 72
4.2.3.4. Поиск и замена в строках……………………………………………………………………………. 74
4.2.4. Сравнение строк……………………………………………………………………………………………………….. 75
4.2.5. Форматируемые строки……………………………………………………………………………………………. 75
4.3. Последовательности…………………………………………………………………………………………………………… 78
4.4. Что еще нужно знать о строках и не только……………………………………………………………………… 79
4.5. Самостоятельные упражнения………………………………………………………………………………………….. 81
Урок 5. Списки, кортежи, генераторы и словари……………………………………. 82
5.1. Списки………………………………………………………………………………………………………………………………….. 82
5.1.1. Создание списков……………………………………………………………………………………………………… 82
5.1.2. Обработка списков……………………………………………………………………………………………………. 82
5.1.2.1. Простейшие операции над списками…………………………………………………………. 82
5.1.2.2. Добавление и удаление элементов списка………………………………………………… 84
5.1.2.3. Обработка элементов списка……………………………………………………………………… 85
5.1.2.4. Поиск элементов в списках…………………………………………………………………………. 86
5.1.2.5. Выдача элементов списков, выбранных псевдослучайным образом…….. 87
5.1.3. Сравнение списков……………………………………………………………………………………………………. 88
5.1.4. Списковые включения………………………………………………………………………………………………. 88
5.2. Кортежи……………………………………………………………………………………………………………………………….. 89
5.2.1. Создание кортежей…………………………………………………………………………………………………… 89
5.2.2. Работа с кортежами………………………………………………………………………………………………….. 89
5.2.3. Именованные кортежи……………………………………………………………………………………………… 90
5.3. Распаковка последовательностей……………………………………………………………………………………… 91
5.3.1. Пара слов о множественном присваивании и множественном выводе………………… 93
5.4. Генераторы………………………………………………………………………………………………………………………….. 93
5.4.1. Генераторы-функции………………………………………………………………………………………………… 93
5.4.2. Генераторы-выражения……………………………………………………………………………………………. 95
5.5. Словари……………………………………………………………………………………………………………………………….. 95
5.5.1. Создание словарей……………………………………………………………………………………………………. 95
5.5.2. Обработка словарей…………………………………………………………………………………………………. 96
5.5.2.1. Простейшие операции над словарями………………………………………………………. 96
5.5.2.2. Добавление, извлечение и удаление элементов словаря…………………………. 97
5.5.2.3. Перебор элементов словаря……………………………………………………………………….. 98
5.5.3. Сравнение словарей……………………………………………………………………………………………….. 100
5.5.4. Словарные включения……………………………………………………………………………………………. 100
5.5.5. Словари со значением по умолчанию defaultdict……………………………………………….. 101
5.6. Отображения……………………………………………………………………………………………………………………… 101
5.7. Особенности хранения значений в переменных. Ссылки……………………………………………… 102
5.8. Копирование списков, кортежей и словарей………………………………………………………………….. 103
5.9. Что еще нужно знать о генераторах и не только……………………………………………………………. 104
5.10. Самостоятельные упражнения………………………………………………………………………………………. 105
Урок 6. Функции………………………………………………………………………………….. 106
6.1. Вызов функций………………………………………………………………………………………………………………….. 106
6.1.1. Виды параметров функций…………………………………………………………………………………….. 106
6.1.2. Распаковка последовательностей и отображений в вызовах функций……………… 107
6.2. Объявление своих функций………………………………………………………………………………………………. 108
6.2.1. Объявление функции………………………………………………………………………………………………. 108
6.2.2. Доступ к глобальным переменным из тела функции…………………………………………… 109
6.2.3. Необязательные параметры………………………………………………………………………………….. 110
6.2.4. Произвольное количество параметров…………………………………………………………………. 111
6.2.5. Строго позиционные, строго именованные и двоякие параметры…………………….. 112
6.3. Функция как значение………………………………………………………………………………………………………. 114
6.3.1. Разные функции и методы, принимающие с параметрами другие функции……… 114
6.4. Лямбда-функции……………………………………………………………………………………………………………….. 116
6.5. Вложенные функции…………………………………………………………………………………………………………. 117
6.5.1. Замыкания. Фабрики функций……………………………………………………………………………….. 118
6.6. Декораторы функций………………………………………………………………………………………………………… 120
6.7. Сообщения об ошибках в телах функций. Стек вызовов………………………………………………. 122
6.8. Что еще нужно знать о функциях…………………………………………………………………………………….. 123
6.9. Самостоятельное упражнение…………………………………………………………………………………………. 124
Урок 7. Классы и объекты……………………………………………………………………. 125
7.1. Объекты……………………………………………………………………………………………………………………………… 125
7.1.1. Создание объектов………………………………………………………………………………………………….. 125
7.1.2. Обращение к атрибутам и вызов методов…………………………………………………………….. 125
7.1.3. Объектные и классовые атрибуты и методы………………………………………………………… 126
7.2. Классы……………………………………………………………………………………………………………………………….. 127
7.2.1. Объявление класса………………………………………………………………………………………………….. 127
7.2.2. Конструктор и деструктор…………………………………………………………………………………….. 128
7.2.3. Наследование классов……………………………………………………………………………………………. 130
7.2.3.1. Объявление производного класса……………………………………………………………. 130
7.2.3.2. Перекрытие и переопределение методов………………………………………………… 131
7.2.3.3. Множественное наследование…………………………………………………………………. 133
7.2.3.4. Указание декораторов функций у методов……………………………………………… 134
7.2.4. Классовые атрибуты и методы. Статические методы………………………………………… 134
7.2.5. Закрытые атрибуты и методы……………………………………………………………………………….. 135
7.2.6. Свойства………………………………………………………………………………………………………………….. 136
7.2.7. Добавленные атрибуты………………………………………………………………………………………….. 138
7.2.7.1. Ограничение набора создаваемых атрибутов……………………………………….. 138
7.2.8. Вложенные классы…………………………………………………………………………………………………. 139
7.2.9. Класс как значение…………………………………………………………………………………………………. 140
7.3. Декораторы классов…………………………………………………………………………………………………………. 140
7.4. Что еще нужно знать об объектах и классах………………………………………………………………….. 141
7.5. Самостоятельные упражнения………………………………………………………………………………………… 142
Урок 8. Модули и пакеты…………………………………………………………………….. 143
8.1. Модули. Импорт и подключение…………………………………………………………………………………….. 143
8.1.1. Использование сущностей из другого модуля……………………………………………………… 143
8.1.1.1. Импорт сущностей…………………………………………………………………………………….. 143
8.1.1.2. Подключение модулей………………………………………………………………………………. 144
8.1.2. Указание сущностей, доступных извне………………………………………………………………… 145
8.1.3. Создание своих модулей………………………………………………………………………………………… 145
8.2. Пакеты……………………………………………………………………………………………………………………………….. 146
8.2.1. Создание пакетов……………………………………………………………………………………………………. 146
8.2.2. Импорт и подключение из пакетов. Пути сущностей………………………………………….. 146
8.3. Что еще нужно знать о модулях, импорте и подключении……………………………………………. 148
8.4. Самостоятельное упражнение…………………………………………………………………………………………. 149
Урок 9. Исключения и их обработка. Обработчики контекстов…………… 150
9.1. Исключения……………………………………………………………………………………………………………………….. 150
9.1.1. Введение в исключения………………………………………………………………………………………….. 150
9.1.2. Обработка исключений………………………………………………………………………………………….. 151
9.1.3. Возбуждение исключений……………………………………………………………………………………… 153
9.1.4. Объявление своих исключений……………………………………………………………………………… 154
9.2. Обработчики контекстов………………………………………………………………………………………………….. 154
Часть II. Язык Python: расширенные инструменты……….. 157
Урок 10. Функции и классы особой функциональности………………………. 159
10.1. Создание генераторов-функций…………………………………………………………………………………….. 159
10.2. Dunder-методы и их использование………………………………………………………………………………. 160
10.2.1. Преобразование объектов в другие типы данных……………………………………………. 161
10.2.2. Поддержка арифметических операций с объектами.
Перегрузка операторов………………………………………………………………………………………. 162
10.2.3. Поддержка операций сравнения……………………………………………………………………….. 164
10.2.4. Создание своих итераторов……………………………………………………………………………….. 164
10.2.5. Создание своих последовательностей……………………………………………………………… 166
10.2.6. Создание своих отображений……………………………………………………………………………. 167
10.2.7. Прочие dunder-методы……………………………………………………………………………………….. 168
10.3. Написание менеджеров контекста………………………………………………………………………………… 170
10.3.1. Функции-менеджеры контекста…………………………………………………………………………. 170
10.3.2. Классы-менеджеры контекста…………………………………………………………………………… 171
10.4. Перечисления………………………………………………………………………………………………………………….. 172
10.5. Что еще нужно знать о классах особой функциональности……………………………………….. 175
10.6. Самостоятельные упражнения………………………………………………………………………………………. 176
Урок 11. Регулярные выражения………………………………………………………….. 177
11.1. Создание регулярных выражений…………………………………………………………………………………. 177
11.2. Написание регулярных выражений………………………………………………………………………………. 177
11.2.1. Метасимволы………………………………………………………………………………………………………. 178
11.2.2. Поднаборы…………………………………………………………………………………………………………… 178
11.2.3. Вариант……………………………………………………………………………………………………………….. 179
11.2.4. Квантификаторы…………………………………………………………………………………………………. 179
11.2.5. Утверждения………………………………………………………………………………………………………… 180
11.2.6. Группы…………………………………………………………………………………………………………………. 181
11.2.7. Обычные символы………………………………………………………………………………………………. 182
11.2.8. Флаги……………………………………………………………………………………………………………………. 182
11.2.9. Тестирование регулярных выражений……………………………………………………………… 183
11.3. Использование регулярных выражений……………………………………………………………………….. 184
11.3.1. Поиск первого совпадения…………………………………………………………………………………. 184
11.3.2. Поиск всех совпадений……………………………………………………………………………………….. 186
11.3.3. Прочие случаи использования…………………………………………………………………………… 186
11.4. Что еще нужно знать о регулярных выражениях и не только…………………………………….. 188
11.5. Самостоятельные упражнения………………………………………………………………………………………. 188
Урок 12. Установка и использование дополнительных библиотек……….. 189
12.1. Работа с дополнительными библиотеками. Утилита pip……………………………………………. 189
12.2. Библиотека Pillow: работа с графикой………………………………………………………………………….. 191
12.3. Программа для создания графических миниатюр, версия 1.0……………………………………. 192
12.4. Модуль argparse: обработка командных ключей……………………………………………………….. 194
12.4.1. Введение в командные ключи и их обработка…………………………………………………. 194
12.4.2. Создание объекта обработчика командных ключей………………………………………. 195
12.4.3. Описание командных ключей……………………………………………………………………………. 196
12.4.4. Обработка командных ключей………………………………………………………………………….. 198
12.5. Программа для создания графических миниатюр, версия 2.0……………………………………. 199
12.6. Что еще нужно знать о дополнительных библиотеках……………………………………………….. 201
12.7. Самостоятельные упражнения………………………………………………………………………………………. 202
Урок 13. Многопоточное и многопроцессное программирование…………. 203
13.1. Многопоточное программирование……………………………………………………………………………… 203
13.1.1. Введение в потоки. Глобальная блокировка интерпретатора……………………….. 203
13.1.2. Создание потоков……………………………………………………………………………………………….. 204
13.1.3. Блокировки………………………………………………………………………………………………………….. 206
13.1.4. Программа для создания графических миниатюр, версия 3.0………………………… 207
13.1.5. Очереди………………………………………………………………………………………………………………… 209
13.1.6. Программа для создания графических миниатюр, версия 3.1………………………… 211
13.2. Многопроцессное программирование………………………………………………………………………….. 213
13.2.1. Процессы и работа с ними…………………………………………………………………………………. 213
13.2.2. Программа для создания графических миниатюр, версия 4.0………………………… 214
13.3. Что еще нужно знать о потоках и процессах……………………………………………………………….. 215
13.4. Самостоятельные упражнения………………………………………………………………………………………. 216