Простой Python. Современный стиль программирования

Билл Любанович

Обложка:


Введение......................................................................................................................................................26
Для кого эта книга.............................................................................................................................27
Что нового во втором издании......................................................................................................27
Структура книги................................................................................................................................28
Версии Python....................................................................................................................................31
Условные обозначения.....................................................................................................................31
Использование примеров кода.....................................................................................................32
От издательства..................................................................................................................................32
Благодарности...........................................................................................................................................33
Об авторе.....................................................................................................................................................34
Часть I. Основы Python
Глава 1. Python: с чем его едят............................................................................................................36
Тайны.....................................................................................................................................................36
Маленькие программы....................................................................................................................38
Более объемная программа............................................................................................................40
Python в реальном мире..................................................................................................................44
Python против языка с планеты Х...............................................................................................45
Почему же Python?...........................................................................................................................48
Когда не стоит использовать Python..........................................................................................49
Python 2 против Python 3...............................................................................................................50
Установка Python...............................................................................................................................51
Запуск Python.....................................................................................................................................51
Интерактивный интерпретатор.............................................................................................51
Файлы Python..............................................................................................................................52
Что дальше?..................................................................................................................................53
Момент просветления......................................................................................................................53
Читайте далее......................................................................................................................................54
Упражнения.........................................................................................................................................54
Глава 2. Данные: типы, значения, переменные и имена.............................................................55
В Python данные являются объектами......................................................................................55
Типы.......................................................................................................................................................56
Изменчивость.....................................................................................................................................57
Значения-литералы..........................................................................................................................58
Переменные.........................................................................................................................................58
Присваивание.....................................................................................................................................60
Переменные — это имена, а не локации.....................................................................................61
Присваивание нескольким именам.............................................................................................64
Переназначение имени....................................................................................................................64
Копирование.......................................................................................................................................64
Выбираем хорошее имя переменной..........................................................................................65
Читайте далее......................................................................................................................................66
Упражнения.........................................................................................................................................66
Глава 3. Числа...........................................................................................................................................67
Булевы значения................................................................................................................................67
Целые числа........................................................................................................................................68
Числа-литералы..........................................................................................................................68
Операции с целыми числами..................................................................................................69
Целые числа и переменные.....................................................................................................71
Приоритет операций..................................................................................................................73
Системы счисления....................................................................................................................74
Преобразования типов..............................................................................................................76
Насколько объемен тип int......................................................................................................78
Числа с плавающей точкой............................................................................................................79
Математические функции..............................................................................................................80
Читайте далее......................................................................................................................................81
Упражнения.........................................................................................................................................81
Глава 4. Выбираем с помощью оператора if...................................................................................82
Комментируем с помощью символа #........................................................................................82
Продлеваем строки с помощью символа \...............................................................................83
Сравниваем с помощью операторов if, elif и else....................................................................84
Что есть истина?................................................................................................................................87
Выполняем несколько сравнений с помощью оператора in...............................................88
Новое: I Am the Walrus....................................................................................................................89
Читайте далее......................................................................................................................................90
Упражнения.........................................................................................................................................90
Глава 5. Текстовые строки....................................................................................................................91
Создаем строки с помощью кавычек..........................................................................................91
Создаем строки с помощью функции str()...............................................................................94
Создаем escape-последовательности с помощью символа \...............................................94
Объединяем строки с использованием символа +.................................................................96
Размножаем строки с помощью символа *...............................................................................96
Извлекаем символ с помощью символов [ ].............................................................................97
Извлекаем подстроки, используя разделение.........................................................................98
Измеряем длину строки с помощью функции len().......................................................... 100
Разделяем строку с помощью функции split()..................................................................... 100
Объединяем строки с помощью функции join()................................................................. 101
Заменяем символы с использованием функции replace()............................................... 101
Устраняем символы с помощью функции strip()................................................................ 102
Поиск и выбор................................................................................................................................. 103
Регистр............................................................................................................................................... 104
Выравнивание.................................................................................................................................. 105
Форматирование............................................................................................................................. 105
Старый стиль: %....................................................................................................................... 106
Новый стиль: используем символы {} и функцию format()...................................... 108
Самый новый стиль: f-строки.............................................................................................. 110
Что еще можно делать со строками.......................................................................................... 111
Читайте далее................................................................................................................................... 111
Упражнения...................................................................................................................................... 111
Глава 6. Создаем циклы с помощью ключевых слов while и for........................................... 113
Повторяем действия с помощью цикла while....................................................................... 113
Прерываем цикл с помощью оператора break............................................................... 114
Пропускаем итерации, используя оператор continue................................................. 114
Проверяем, завершился ли цикл раньше, с помощью блока else............................ 115
Выполняем итерации с использованием ключевых слов for и in.................................. 115
Прерываем цикл с помощью оператора break............................................................... 116
Пропускаем итерации, используя оператор continue................................................. 116
Проверяем, завершился ли цикл раньше, с помощью блока else............................ 116
Генерируем числовые последовательности с помощью функции range()........... 117
Прочие итераторы.......................................................................................................................... 118
Читайте далее................................................................................................................................... 118
Упражнения...................................................................................................................................... 118
Глава 7. Кортежи и списки................................................................................................................ 119
Кортежи............................................................................................................................................. 119
Создаем кортежи с помощью запятых и оператора ()................................................ 120
Создаем кортежи с помощью функции tuple()............................................................. 121
Объединяем кортежи с помощью оператора +.............................................................. 121
Размножаем элементы с помощью оператора * ........................................................... 122
Сравниваем кортежи.............................................................................................................. 122
Итерируем по кортежам с помощью for и in.................................................................. 122
Изменяем кортеж..................................................................................................................... 122
Списки................................................................................................................................................ 123
Создаем списки с помощью скобок []............................................................................... 123
Создаем список или преобразуем в список с помощью функции list()................ 123
Создаем список из строки с использованием функции split()................................ 124
Получаем элемент с помощью конструкции [смещение].......................................... 124
Извлекаем элементы с помощью разделения................................................................ 125
Добавляем элемент в конец списка с помощью функции append()....................... 126
Добавляем элемент на определенное место с помощью функции insert().......... 126
Размножаем элементы с помощью оператора *............................................................ 127
Объединяем списки с помощью метода extend() или оператора +........................ 127
Изменяем элемент с помощью конструкции [смещение]......................................... 128
Изменяем элементы с помощью разделения................................................................. 128
Удаляем заданный элемент с помощью оператора del................................................ 129
Удаляем элемент по значению с помощью функции remove()................................ 129
Получаем и удаляем заданный элемент с помощью функции pop()..................... 129
Удаляем все элементы с помощью функции clear().................................................... 130
Определяем смещение по значению с помощью функции index()........................ 130
Проверяем на наличие элемента в списке с помощью оператора in...................... 131
Подсчитываем количество включений значения с помощью
функции count()....................................................................................................................... 131
Преобразуем список в строку с помощью функции join()........................................ 131
Меняем порядок элементов с помощью функций sort() или sorted().................. 132
Получаем длину списка с помощью функции len().................................................... 133
Присваиваем с помощью оператора =.............................................................................. 133
Копируем списки с помощью функций copy() и list() или путем
разделения.................................................................................................................................. 134
Копируем все с помощью функции deepcopy()............................................................ 134
Сравниваем списки ................................................................................................................ 135
Итерируем по спискам с помощью операторов for и in.............................................. 136
Итерируем по нескольким последовательностям с помощью
функции zip()............................................................................................................................ 137
Создаем список с помощью списковых включений.................................................... 138
Списки списков........................................................................................................................ 140
Кортежи или списки?................................................................................................................... 141
Включений кортежей не существует....................................................................................... 141
Читайте далее................................................................................................................................... 142
Упражнения...................................................................................................................................... 142
Глава 8. Словари и множества......................................................................................................... 144
Словари.............................................................................................................................................. 144
Создаем словарь с помощью {}............................................................................................ 144
Создаем словарь с помощью функции dict()................................................................. 145
Преобразуем с помощью функции dict()........................................................................ 146
Добавляем или изменяем элемент с помощью конструкции [ключ].................... 146
Получаем элемент словаря с помощью конструкции [ключ]
или функции get()................................................................................................................... 148
Получаем все ключи с помощью функции keys()........................................................ 148
Получаем все значения с помощью функции values()............................................... 149
Получаем все пары «ключ — значение» с помощью функции items().................. 149
Получаем длину словаря с помощью функции len().................................................. 149
Объединяем словари с помощью конструкции {**a, **b}.......................................... 149
Объединяем словари
с помощью функции update().............................................................................................. 150
Удаляем элементы по их ключу с помощью оператора del....................................... 151
Получаем элемент по ключу и удаляем его с помощью функции pop().............. 151
Удаляем все элементы с помощью функции clear().................................................... 151
Проверяем на наличие ключа с помощью оператора in............................................. 152
Присваиваем значения с помощью оператора =........................................................... 152
Копируем значения с помощью функции copy()......................................................... 152
Копируем все с помощью функции deepcopy() ........................................................... 153
Сравниваем словари............................................................................................................... 154
Итерируем по словарям с помощью for и in................................................................... 154
Включения словарей............................................................................................................... 155
Множества........................................................................................................................................ 156
Создаем множество с помощью функции set()............................................................. 157
Преобразуем другие типы данных с помощью функции set()................................. 157
Получаем длину множества с помощью функции len()............................................. 158
Добавляем элемент с помощью функции add()............................................................ 158
Удаляем элемент с помощью функции remove().......................................................... 158
Итерируем по множествам с помощью for и in............................................................. 158
Проверяем на наличие значения с помощью оператора in....................................... 158
Комбинации и операторы..................................................................................................... 159
Включение множества........................................................................................................... 162
Создаем неизменяемое множество с помощью функции frozenset().................... 162
Структуры данных, которые мы уже рассмотрели............................................................. 163
Создание крупных структур данных....................................................................................... 164
Читайте далее................................................................................................................................... 164
Упражнения...................................................................................................................................... 165
Глава 9. Функции................................................................................................................................. 166
Определяем функцию с помощью ключевого слова def................................................... 166
Вызываем функцию с помощью скобок................................................................................. 167
Аргументы и параметры............................................................................................................... 167
None — это полезно.................................................................................................................. 169
Позиционные аргументы...................................................................................................... 170
Аргументы — ключевые слова............................................................................................. 171
Указываем значение параметра по умолчанию............................................................. 171
Получаем/разбиваем аргументы — ключевые слова с помощью символа *....... 172
Получаем/разбиваем аргументы — ключевые слова с помощью
символов **................................................................................................................................ 174
Аргументы, передаваемые только по ключевым словам............................................ 175
Изменяемые и неизменяемые аргументы....................................................................... 176
Строки документации................................................................................................................... 176
Функции — это объекты первого класса................................................................................ 177
Внутренние функции.................................................................................................................... 179
Анонимные функции: лямбда-выражения............................................................................ 181
Генераторы........................................................................................................................................ 182
Функции-генераторы............................................................................................................. 182
Включения генераторов......................................................................................................... 183
Декораторы....................................................................................................................................... 183
Пространства имен и область определения.......................................................................... 186
Использование символов _ и __ в именах............................................................................. 188
Рекурсия............................................................................................................................................ 188
Асинхронные функции................................................................................................................. 190
Исключения..................................................................................................................................... 190
Обрабатываем ошибки с помощью операторов try и except..................................... 191
Создаем собственные исключения.................................................................................... 192
Читайте далее................................................................................................................................... 193
Упражнения...................................................................................................................................... 193
Глава 10. Ой-ой-ой: объекты и классы.......................................................................................... 194
Что такое объекты.......................................................................................................................... 194
Простые объекты............................................................................................................................ 195
Определяем класс с помощью ключевого слова class................................................. 195
Атрибуты..................................................................................................................................... 196
Методы........................................................................................................................................ 197
Инициализация........................................................................................................................ 197
Наследование................................................................................................................................... 198
Наследование от родительского класса........................................................................... 199
Переопределение методов.................................................................................................... 200
Добавление метода.................................................................................................................. 201
Получаем помощь от своего родителя с использованием
метода super()............................................................................................................................ 202
Множественное наследование............................................................................................ 203
Примеси...................................................................................................................................... 205
В защиту self..................................................................................................................................... 205
Доступ к атрибутам........................................................................................................................ 206
Прямой доступ.......................................................................................................................... 206
Геттеры и сеттеры..................................................................................................................... 206
Свойства для доступа к атрибутам.................................................................................... 207
Свойства для вычисляемых значений.............................................................................. 209
Искажение имен для безопасности................................................................................... 209
Атрибуты классов и объектов.............................................................................................. 210
Типы методов................................................................................................................................... 211
Методы объектов..................................................................................................................... 211
Методы классов........................................................................................................................ 212
Статические методы................................................................................................................ 212
Утиная типизация.......................................................................................................................... 213
Магические методы....................................................................................................................... 215
Агрегирование и композиция.................................................................................................... 218
Когда использовать объекты, а когда — что-то другое...................................................... 218
Именованные кортежи................................................................................................................. 219
Классы данных................................................................................................................................ 221
attrs...................................................................................................................................................... 222
Читайте далее................................................................................................................................... 222
Упражнения...................................................................................................................................... 222
Глава 11. Модули, пакеты и программы....................................................................................... 224
Модули и оператор import.......................................................................................................... 224
Импортируем модуль............................................................................................................. 224
Импортируем модуль с другим именем........................................................................... 226
Импортируем только самое необходимое....................................................................... 226
Пакеты................................................................................................................................................ 227
Путь поиска модуля................................................................................................................ 228
Относительный и абсолютный импорт............................................................................ 229
Пакеты пространств имен..................................................................................................... 229
Модули против объектов...................................................................................................... 230
Достоинства стандартной библиотеки Python.................................................................... 231
Обрабатываем отсутствующие ключи с помощью функций setdefault()
и defaultdict()............................................................................................................................ 231
Подсчитываем элементы с помощью функции Counter()........................................ 233
Упорядочиваем по ключу с помощью OrderedDict().................................................. 235
Стек + очередь == deque........................................................................................................ 235
Итерируем по структурам кода с помощью модуля itertools................................... 236
Красиво выводим данные на экран с помощью функции pprint()......................... 238
Работаем со случайными числами..................................................................................... 238
Нужно больше кода....................................................................................................................... 239
Читайте далее................................................................................................................................... 240
Упражнения...................................................................................................................................... 240
Часть II. Python на практике
Глава 12. Обрабатываем данные...................................................................................................... 242
Текстовые строки: Unicode.......................................................................................................... 243
Строки формата Unicode в Python 3................................................................................. 244
Кодирование и декодирование с помощью кодировки UTF-8................................ 246
Кодирование.............................................................................................................................. 247
Декодирование.......................................................................................................................... 249
Сущности HTML..................................................................................................................... 250
Нормализация........................................................................................................................... 251
Подробная информация........................................................................................................ 252
Текстовые строки: регулярные выражения........................................................................... 253
Ищем точное начальное совпадение с помощью функции match()...................... 254
Ищем первое совпадение с помощью функции search()............................................ 255
Ищем все совпадения, используя функцию findall().................................................. 255
Разбиваем совпадения с помощью функции split()..................................................... 256
Заменяем совпадения с помощью функции sub()........................................................ 256
Шаблоны: специальные символы...................................................................................... 256
Шаблоны: использование спецификаторов................................................................... 258
Шаблоны: указываем способ вывода совпадения........................................................ 261
Бинарные данные........................................................................................................................... 261
bytes и bytearray........................................................................................................................ 262
Преобразуем бинарные данные с помощью модуля struct........................................ 263
Другие инструменты для работы с бинарными данными................................................ 266
Преобразуем байты/строки с помощью модуля binascii........................................... 267
Битовые операторы................................................................................................................. 267
Аналогия с ювелирными изделиями....................................................................................... 268
Читайте далее................................................................................................................................... 268
Упражнения...................................................................................................................................... 268
Глава 13. Календари и часы............................................................................................................... 271
Високосный год............................................................................................................................... 272
Модуль datetime.............................................................................................................................. 273
Модуль time...................................................................................................................................... 275
Читаем и записываем дату и время.......................................................................................... 277
Все преобразования....................................................................................................................... 281
Альтернативные модули.............................................................................................................. 281
Читайте далее................................................................................................................................... 282
Упражнения...................................................................................................................................... 282
Глава 14. Файлы и каталоги.............................................................................................................. 283
Ввод информации в файлы и ее вывод из них..................................................................... 283
Создаем или открываем файлы с помощью функции open().................................. 284
Записываем в текстовый файл с помощью функции print().................................... 284
Записываем в текстовый файл с помощью функции write()................................... 285
Считываем данные из текстового файла, используя функции read(),
readline() и readlines()............................................................................................................ 286
Записываем данные в бинарный файл с помощью функции write().................... 288
Читаем бинарные файлы с помощью функции read()................................................ 289
Закрываем файлы автоматически с помощью ключевого слова with................... 289
Меняем позицию с помощью функции seek()............................................................... 289
Отображение в памяти................................................................................................................. 291
Операции с файлами..................................................................................................................... 292
Проверяем существование файла с помощью функции exists()............................. 292
Проверяем тип с помощью функции isfile()................................................................... 292
Копируем файлы, используя функцию copy().............................................................. 293
Изменяем имена файлов с помощью функции rename()........................................... 293
Создаем ссылки с помощью функции link() или symlink()...................................... 293
Изменяем разрешения с помощью функции chmod()................................................ 294
Изменение владельца файла с помощью функции chown()..................................... 294
Удаляем файл с помощью функции remove()................................................................ 294
Каталоги............................................................................................................................................ 295
Создаем каталог с помощью функции mkdir()............................................................. 295
Удаляем каталог, используя функцию rmdir().............................................................. 295
Выводим на экран содержимое каталога с помощью функции listdir()............... 295
Изменяем текущий каталог с помощью функции chdir()......................................... 296
Перечисляем совпадающие файлы, используя функцию glob()............................. 296
Pathname............................................................................................................................................ 297
Получаем путь с помощью функции abspath()............................................................. 298
Получаем символьную ссылку с помощью функции realpath()............................. 298
Построение пути с помощью функции os.path.join().................................................. 298
Модуль pathlib.......................................................................................................................... 298
BytesIO и StringIO......................................................................................................................... 299
Читайте далее................................................................................................................................... 301
Упражнения...................................................................................................................................... 301
Глава 15. Данные во времени: процессы и конкурентность.................................................. 302
Программы и процессы................................................................................................................ 302
Создаем процесс с помощью модуля subprocess........................................................... 303
Создаем процесс с помощью модуля multiprocessing................................................. 304
Убиваем процесс, используя функцию terminate()..................................................... 305
Получаем системную информацию с помощью модуля os....................................... 306
Получаем информацию о процессах с помощью модуля psutil............................... 306
Автоматизация команд................................................................................................................. 307
Invoke........................................................................................................................................... 307
Другие вспомогательные методы для команд...................................................................... 308
Конкурентность.............................................................................................................................. 308
Очереди....................................................................................................................................... 309
Процессы..................................................................................................................................... 310
Потоки......................................................................................................................................... 311
Concurrent.futures.................................................................................................................... 314
Зеленые потоки и gevent....................................................................................................... 317
twisted.......................................................................................................................................... 320
asyncio.......................................................................................................................................... 321
Redis.............................................................................................................................................. 321
Помимо очередей..................................................................................................................... 325
Читайте далее................................................................................................................................... 326
Упражнения...................................................................................................................................... 326
Глава 16. Данные в коробке: надежные хранилища................................................................. 327
Плоские текстовые файлы.......................................................................................................... 327
Текстовые файлы, дополненные пробелами......................................................................... 328
Структурированные текстовые файлы................................................................................... 328
CSV............................................................................................................................................... 328
XML.............................................................................................................................................. 331
Примечание о безопасности XML .................................................................................... 333
HTML........................................................................................................................................... 333
JSON............................................................................................................................................. 334
YAML........................................................................................................................................... 337
Tablib............................................................................................................................................ 338
Pandas........................................................................................................................................... 338
Конфигурационные файлы.................................................................................................. 340
Бинарные файлы............................................................................................................................ 341
Электронные таблицы.................................................................................................................. 341
HDF5............................................................................................................................................ 341
TileDB.......................................................................................................................................... 342
Реляционные базы данных......................................................................................................... 342
SQL............................................................................................................................................... 343
DB-API........................................................................................................................................ 345
SQLite.......................................................................................................................................... 345
MySQL......................................................................................................................................... 347
PostgreSQL................................................................................................................................. 347
SQLAlchemy............................................................................................................................... 348
Другие пакеты для работы с базами данных.................................................................. 354
Хранилища данных NoSQL........................................................................................................ 354
Семейство dbm.......................................................................................................................... 354
Memcached.................................................................................................................................. 355
Redis.............................................................................................................................................. 356
Документоориентированные базы данных..................................................................... 363
Базы данных временных рядов........................................................................................... 364
Графовые базы данных........................................................................................................... 365
Другие серверы NoSQL......................................................................................................... 365
Полнотекстовые базы данных.................................................................................................... 366
Читайте далее................................................................................................................................... 366
Упражнения...................................................................................................................................... 366
Глава 17. Данные в пространстве: сети......................................................................................... 368
TCP/IP............................................................................................................................................... 368
Сокеты......................................................................................................................................... 370
scapy.............................................................................................................................................. 374
Netcat............................................................................................................................................ 374
Паттерны для работы с сетями.................................................................................................. 375
Паттерн «Запрос — ответ».......................................................................................................... 375
ZeroMQ........................................................................................................................................ 375
Другие инструменты обмена сообщениями................................................................... 380
Паттерн «Публикация — подписка»........................................................................................ 380
Redis.............................................................................................................................................. 380
ZeroMQ........................................................................................................................................ 382
Другие инструменты «Публикации — подписки»....................................................... 383
Интернет-сервисы.......................................................................................................................... 384
Доменная система имен......................................................................................................... 384
Модули Python для работы с электронной почтой..................................................... 385
Другие протоколы................................................................................................................... 385
Веб-сервисы и API......................................................................................................................... 385
Сериализация данных................................................................................................................... 386
Сериализация с помощью pickle........................................................................................ 387
Другие форматы сериализации.......................................................................................... 388
Удаленные вызовы процедур...................................................................................................... 388
XML RPC.......................................................................................................................................... 389
JSON RPC................................................................................................................................... 390
MessagePack RPC..................................................................................................................... 391
Zerorpc......................................................................................................................................... 392
gRPC............................................................................................................................................. 393
Twirp............................................................................................................................................. 393
Инструменты удаленного управления................................................................................... 394
Работаем с большими объемами данных............................................................................... 394
Hadoop......................................................................................................................................... 394
Spark............................................................................................................................................. 395
Disco.............................................................................................................................................. 395
Dask............................................................................................................................................... 395
Работаем в облаках........................................................................................................................ 396
Amazon Web Services............................................................................................................... 397
Google........................................................................................................................................... 397
Microsoft Azure.......................................................................................................................... 397
OpenStack................................................................................................................................... 398
Docker................................................................................................................................................. 398
Kubernetes................................................................................................................................... 398
Читайте далее................................................................................