Предисловие....25
Для кого эта книга....26
Что нового в третьем издании....26
Структура книги....26
Версии Python....29
Об авторе....30
Условные обозначения....31
Использование примеров кода....32
Часть I. Замок....35
Глава 1. Введение....37
Тайны....37
Маленькие программы....39
Настройка окружения....42
Установка Python....42
Обновление Python....42
Запуск программ на Python....43
Интерактивный интерпретатор Python....43
Файлы с кодом на Python....44
Встроенные возможности Python....45
Стандартная библиотека Python....45
Сторонние пакеты Python....45
Более сложный пример....45
Итоги и взгляд вперед....48
Глава 2. Типы и переменные....49
Компьютер....49
Биты и байты....50
Многобайтовые типы....52
Переменные....53
Присваивание значения переменной....53
Изменение значения переменной....56
Удаление переменной....57
Имена переменных....57
Соглашения об именовании....58
Типы в Python....59
Задание значений....60
Объекты как коробки в памяти....60
Итоги и взгляд вперед....61
Упражнения....61
Глава 3. Числа....62
Булевы значения....62
Целые числа....63
Целочисленные литералы....64
Операции с целыми числами....65
Целые числа и переменные....67
Приоритет операций....69
Системы счисления....70
Преобразования типов....72
Насколько большими могут быть значения типа int....74
Числа с плавающей точкой....75
Точность арифметики с плавающей точкой....77
Дроби....77
Десятичные дроби....78
Математические функции....78
Итоги и взгляд вперед....79
Упражнения....79
Глава 4. Строки....80
Создаем строки с помощью кавычек....81
Создаем строки с помощью str()....84
Создаем управляющие последовательности с помощью ....84
Объединяем строки с помощью ....85
Размножаем строки с помощью ....86
Извлекаем символ с помощью [ ]....86
Извлекаем подстроки с помощью срезов....87
Измеряем длину строки с помощью len()....90
Деление строки с помощью split()....90
Объединяем строки с помощью join()....91
Заменяем символы с помощью replace()....91
Префиксы и суффиксы....92
Устраняем символы с помощью strip()....92
Поиск и выбор....93
Регистр....95
Выравнивание....96
Форматирование....96
Старый стиль: %....96
Новый стиль: {} и format()....99
Новейший стиль: f-строки....101
Итоги и взгляд вперед....102
Упражнения....103
Глава 5. Строки и массивы байтов....104
Строки байтов....104
Создание с помощью кавычек....104
Создание с помощью bytes()....105
Создание из шестнадцатеричной строки....106
Декодирование и кодирование текстовых строк и строк байтов....106
Преобразование в шестнадцатеричную строку....107
Получение одного байта по [смещению]....107
Получение среза....107
Объединение с помощью ....108
Размножение с помощью ....108
Массивы байтов....108
Создание с помощью bytearray()....108
Получение одного байта по [смещению]....109
Получение нескольких байтов с помощью среза....109
Изменение одного байта по [смещению]....110
Изменение нескольких байтов с помощью replace()....110
Изменение нескольких байтов с помощью среза....110
Вставка байта с помощью insert()....110
Добавление одного байта с помощью append()....111
Добавление нескольких байтов с помощью extend()....111
Объединение с помощью ....111
Размножение с помощью ....111
Итоги и взгляд вперед....112
Упражнения....112
Глава 6. Операторы if и match....113
Комментируем с помощью ....113
Продлеваем строки с помощью ....114
Сравниваем с помощью if, elif и else....115
Что есть истина....119
Выполняем несколько сравнений с помощью in....120
Новое: I Am the Walrus....121
Сопоставление с помощью match....122
Простые совпадения....122
Структурные соответствия....123
Итоги и взгляд вперед....124
Упражнения....124
Глава 7. Операторы while и for....125
Повторение с помощью while....125
Прерываем цикл с помощью break....126
Пропускаем итерации с помощью continue....126
Проверка использования break с помощью else....127
Выполняем итерации с помощью for и in....127
Прерываем цикл с помощью break....128
Пропускаем итерации с помощью continue....128
Проверка использования break с помощью else....128
Генерируем числовые последовательности с помощью range()....129
Итоги и взгляд вперед....130
Упражнения....130
Глава 8. Кортежи и списки....131
Кортежи....131
Создание кортежей с помощью запятых и оператора ()....132
Создание кортежей с помощью tuple()....134
Получение элементов по [смещению]....134
Объединение с помощью ....134
Размножение с помощью ....134
Сравнение....135
Итерации с помощью for и in....135
Изменение возможно?....135
Списки....136
Создание с помощью [ ]....136
Создание или преобразование с помощью list()....136
Создание из строки с помощью split()....137
Получение элементов по [смещению]....137
Получение элементов с помощью срезов....138
Добавление элемента в конец списка с помощью append()....139
Добавление элемента на определенное место с помощью insert()....139
Размножение элементов с помощью ....140
Объединение списков с помощью extend() или ....140
Изменение элемента по [смещению]....141
Изменение элемента с помощью среза....141
Удаление элемента по смещению с помощью del....142
Удаление элемента по значению с помощью remove()....142
Получение и удаление элемента по смещению с помощью pop()....142
Удаление всех элементов с помощью clear()....143
Определение смещения по значению с помощью index()....143
Проверка наличия элемента с помощью in....144
Подсчет количества вхождений значения с помощью count()....144
Преобразование списка в строку с помощью join()....144
Изменение порядка элементов с помощью sort() или sorted()....145
Получение длины списка с помощью len()....146
Присваивание с помощью ....146
Копирование списков с помощью copy(), list() или срезов....147
Копирование содержимого списка с помощью deepcopy()....147
Сравнение списков....149
Итерации с помощью for и in....149
Итерации по нескольким последовательностям с помощью zip()....150
Итерации по нескольким последовательностям с помощью zip_longest()....151
Создание списка с помощью спискового включения....152
Списки списков....154
Кортежи или списки?....155
Включений кортежей не существует....155
Итоги и взгляд вперед....156
Упражнения....156
Глава 9. Словари и множества....158
Словари....158
Создание словаря с помощью {}....158
Создание словаря с помощью dict()....159
Преобразование с помощью dict()....160
Добавление или изменение элемента по [ключу]....160
Получение элемента словаря с помощью [ключа] или get()....162
Итерации по словарям с помощью for и in....163
Получение длины словаря с помощью len()....164
Объединениеобновление словарей....164
Удаление элементов по ключу с помощью del....166
Получение элемента по ключу и его удаление с помощью pop()....166
Удаление всех элементов с помощью clear()....167
Проверка наличия ключа с помощью in....167
Присваивание значения с помощью оператора ....167
Копирование с помощью copy()....168
Копирование содержимого словаря с помощью deepcopy()....168
Сравнение словарей....169
Включения словарей....170
Множества....171
Создание множества с помощью set()....171
Получение длины с помощью len()....172
Добавление элемента с помощью add()....173
Удаление элемента с помощью remove()....173
Объединение с помощью ....173
Итерации с помощью for и in....173
Проверка наличия значения с помощью in....174
Комбинации и операторы....174
Включение множества....178
Создание неизменяемого множества с помощью frozenset()....178
Итоги и взгляд вперед....179
Упражнения....179
Глава 10. Функции....181
Определение функции с помощью def....181
Вызов функции с помощью скобок....182
Аргументы и параметры....183
None, истинность и ложность....184
Позиционные аргументы....186
Именованные аргументы....187
Значения по умолчанию для параметров....187
Упаковкараспаковка позиционных аргументов с помощью ....188
Упаковкараспаковка именованных аргументов с помощью ....190
Передача аргументов только по именам () и только по позициям ()....191
Изменяемые и неизменяемые аргументы....193
Строки документации....194
Функции это объекты первого класса....194
Набор аргументов функции не является кортежем....197
Вложенные функции....197
Замыкания....198
Анонимные функции: лямбда-выражения....199
Генераторы....200
Функции-генераторы....200
Включения генераторов....202
Декораторы....202
Пространства имен и область видимости....205
Использование символов _ и __ в именах....207
Рекурсия....207
Асинхронные функции, кратко....209
Исключения....209
Обработка ошибок с помощью операторов try и except....210
Блок finally....211
Создание собственных исключений....212
Итоги и взгляд вперед....213
Упражнения....213
Глава 11. Объекты....214
Что такое объекты....214
Простые объекты....215
Определение класса с помощью class....215
Атрибуты....216
Методы....217
Инициализация....217
Наследование....218
Наследование от родительского класса....219
Переопределение методов....220
Добавление метода....221
Получение помощи от родителя с использованием метода super()....222
Множественное наследование....223
Примеси....225
В защиту self....225
Доступ к атрибутам....226
Прямой доступ....226
Геттеры и сеттеры....227
Свойства для доступа к атрибутам....227
Свойства для вычисляемых значений....229
Искажение имен для безопасности....230
Атрибуты классов и объектов....231
Типы методов....232
Методы экземпляров....232
Методы классов....232
Статические методы....233
Утиная типизация....233
Магические методы....235
Агрегирование и композиция....238
Когда использовать объекты, а когда что-то другое....239
Именованные кортежи....240
Классы данных....242
Attrs....243
Итоги и взгляд вперед....243
Упражнения....244
Глава 12. Модули и пакеты....245
Модули и оператор import....245
Импортирование модуля....245
Импортирование модуля с другим именем....247
Импортирование только самого необходимого....248
Пакеты....248
Путь поиска модуля....250
Относительный и абсолютный импорт....251
Пакеты пространств имен....251
Модули против объектов....252
Достоинства стандартной библиотеки Python....253
Обработка отсутствующих ключей с помощью функций setdefault() и defaultdict()....254
Подсчет элементов с помощью Counter()....256
Упорядочивание по ключу с помощью OrderedDict()....257
Стек очередь deque....258
Итерации по структурам кода с помощью itertools....259
Случайные значения....260
Еще больше батареек: получение сторонних модулей....261
Итоги и взгляд вперед....262
Упражнения....262
Часть II. Инструменты....263
Глава 13. Среда разработки....264
Ищем код на Python....264
Установка пакетов....265
С помощью pip....265
С помощью менеджера пакетов....266
Установка из исходного кода....267
Виртуальные среды....267
virtualenv и venv....268
Pipenv....269
Poetry....269
Conda....269
uv....269
Интегрированные среды разработки....270
IPython....271
Jupyter Notebook....273
JupyterLab....273
Управление исходным кодом....273
Git....274
Итоги и взгляд вперед....277
Упражнения....277
Глава 14. Аннотации типов и документация....278
Аннотации типов....278
Аннотирование переменных....279
Аннотирование функций....280
Mypy....280
Документация....281
Комментарии....282
Строки документации....282
Текстовые файлы разметки....282
Итоги и взгляд вперед....283
Упражнения....283
Глава 15. Тестирование....284
Pylint....284
Ruff....286
Unittest....287
Doctest....291
Pytest....292
Примеры....293
Фикстуры....294
Параметризация....296
Hypothesis....297
Nox....298
Непрерывная интеграция....298
Итоги и взгляд вперед....299
Упражнения....299
Глава 16. Отладка....300
Утверждения....301
Простой вывод....302
F-строки....302
Функция pprint()....302
Пакет IceCream....303
Декораторы....304
Журналирование....305
Отладчик pdb....308
Функция breakpoint()....314
Итоги и взгляд вперед....314
Упражнения....314
Часть III. Приключения....315
Глава 17. Текстовые данные....316
Текстовые строки: Юникод....316
Строки Юникода в Python....317
UTF-8....320
Кодирование....321
Декодирование....323
Сущности HTML....324
Нормализация....325
Текстовые строки: регулярные выражения....327
Поиск точного начального совпадения с помощью функции match()....328
Поиск первого совпадения с помощью search()....329
Поиск всех совпадений с помощью функции findall()....329
Разбиение строки по совпадениям с помощью функции split()....330
Замена совпадений с помощью функции sub()....330
Шаблоны....330
Специальные символы....330
Спецификаторы....332
Вывод совпадений....335
Итоги и взгляд вперед....335
Упражнения....336
Глава 18. Двоичные данные....337
Преобразование двоичных данных с помощью struct....337
Другие инструменты для работы с двоичными данными....340
Преобразование байтовстрок с помощью binascii()....341
Битовые операторы....341
Итоги и взгляд вперед....342
Упражнения....342
Глава 19. Даты и время....343
Високосный год....344
Модуль datetime....344
Модуль time....347
Чтение и запись даты и времени....350
Все преобразования....354
Альтернативные модули....354
Итоги и взгляд вперед....355
Упражнения....355
Глава 20. Файлы....356
Ввод информации в файлы и ее вывод из них....356
Создание или открытие файлов с помощью open()....356
Запись в текстовый файл с помощью print()....357
Запись в текстовый файл с помощью write()....358
Чтение данных из текстового файла с помощью read(), readline() и readlines()....359
Запись данных в двоичный файл с помощью write()....361
Чтение двоичных файлов с помощью read()....362
Автоматическое закрытие файла с помощью with....362
Изменение позиции с помощью seek()....362
Отображение в память....364
Операции с файлами....365
Проверка существования файла с помощью exists()....365
Проверка типа с помощью isfile()....365
Копирование файлов с помощью copy()....366
Изменение имен файлов с помощью rename()....366
Создание ссылок с помощью link() или symlink()....366
Изменение разрешений с помощью chmod()....367
Изменение владельца файла с помощью chown()....367
Удаление файла с помощью remove()....367
Каталоги....368
Создание каталога с помощью mkdir()....368
Удаление каталога с помощью rmdir()....368
Вывод на экран содержимого каталога с помощью listdir()....368
Изменение текущего каталога с помощью chdir()....369
Перечисление файлов, соответствующих шаблону, с помощью glob()....369
Пути к файлам....370
Получение путей к файлам с помощью abspath()....371
Получение символической ссылки с помощью realpath()....371
Конструирование путей к файлам с помощью os.path.join()....371
Использование модуля pathlib....372
BytesIO и StringIO....372
Форматы файлов: определение....374
Итоги и взгляд вперед....375
Упражнения....375
Глава 21. Данные во времени: конкурентность....376
Программы и процессы....376
Создание процесса с помощью модуля subprocess....377
Создание процесса с помощью модуля multiprocessing....378
Остановка процесса с помощью функции terminate()....379
Получение системной информации с помощью модуля os....380
Получение информации о процессах с помощью модуля psutil....380
Автоматизация команд....381
Invoke....381
Другие вспомогательные методы для команд....382
Конкурентность....383
Очереди....384
Процессы....385
Потоки выполнения....386
GIL....388
concurrent.futures....389
Зеленые потоки и gevent....392
Twisted....395
asyncio....396
Сопрограммы и циклы событий....397
Альтернативы asyncio....399
Async против....400
Асинхронные фреймворки и серверы....401
Redis....402
Помимо очередей....405
Итоги и взгляд вперед....406
Упражнения....406
Глава 22. Данные в пространстве: сети....407
TCPIP....407
Сокеты....409
Scapy....413
Netcat....414
Паттерны для работы с сетями....414
Паттерн запрос ответ....415
Запрос-ответ: ZeroMQ....415
Запрос ответ: другие инструменты обмена сообщениями....419
Паттерн издатель подписчик....419
Издатель подписчик: Redis....420
Издатель подписчик: ZeroMQ....421
Издатель подписчик: другие инструменты....423
Интернет-сервисы....423
Система доменных имен....424
Модули Python для работы с электронной почтой....425
Другие протоколы....425
Веб-сервисы и API....425
Сериализация данных....426
Сериализация с помощью pickle....426
Другие форматы сериализации....427
Вызовы удаленных процедур....428
XML RPC....429
JSON RPC....430
MessagePack RPC....431
Zerorpc....432
gRPC....432
Инструменты удаленного управления....433
Работа с большими объемами данных....434
Hadoop....434
Spark....435
Disco....435
Dask....435
Облака....435
Amazon Web Services....437
Google Cloud....437
Microsoft Azure....437
OpenStack....437
Docker....438
Kubernetes....438
Итоги и взгляд вперед....438
Упражнения....438
Глава 23. Данные в коробке: надежные хранилища....440
Текстовые файлы....440
Структурированные текстовые файлы....441
CSV....441
XML....444
Примечание о безопасности XML....446
HTML....446
JSON....447
YAML....450
TOML....451
Tablib....451
Конфигурационные файлы....451
Двоичные файлы....452
Двоичные файлы с дополнением и отображение в память....452
Электронные таблицы....453
HDF5....453
TileDB....453
Реляционные базы данных....454
SQL....455
DB-API....456
SQLite....457
DuckDB....459
MySQL....459
PostgreSQL....460
SQLAlchemy....460
Другие пакеты для работы с базами данных....466
Хранилища данных NoSQL....466
Семейство dbm....467
Memcached....468
Redis....468
Valkey альтернатива Redis?....476
Документоориентированные базы данных....476
Базы данных временных рядов....477
Графовые базы данных....478
Другие серверы NoSQL....478
Полнотекстовые базы данных....478
Векторные базы данных....479
Геопространственные базы данных....479
Итоги и взгляд вперед....479
Упражнения....480
Глава 24. Всемирная паутина....481
Основы Всемирной паутины....482
Тестируем HTTP....483
Telnet....483
curl....484
HTTPie....485
httpbin....486
Веб-клиенты....486
Стандартная библиотека....486
Requests....488
Другие веб-клиенты....490
Веб-серверы....492
Простейший веб-сервер на Python....492
Web Server Gateway Interface....494
ASGI....495
Apache....495
NGINX....497
Другие веб-серверы на Python....497
Фреймворки для работы веб-серверами....497
Bottle....498
Flask....501
Django....505
FastAPI....505
Litestar....506
Фреймворки для работы с базами данных....506
Веб-сервисы и автоматизация....507
webbrowser....507
webview....508
REST API....508
Веб-сокеты....509
Веб-обработчики....511
Веб-интерфейсы....511
htmx....511
FastHTML....512
Поиск и выборка данных....513
Scrapy....513
Beautiful Soup....513
Requests-HTML....514
Давайте посмотрим фильм....515
Итоги и взгляд вперед....518
Упражнения....518
Глава 25. Наука о данных....519
Стандартный Python....519
Преобразование форматов....521
math....521
Комплексные числа....523
Вычисление точных значений с плавающей точкой с помощью decimal....524
Рациональные арифметические действия с дробями....525
Использование упакованных последовательностей с помощью array....525
Statistics....526
Умножение матриц....526
NumPy....526
Создание массива с помощью array()....527
Создание массива с помощью arange()....527
Создание массива с помощью zeros(), ones() или random()....528
Изменение формы массива с помощью reshape()....529
Получение элемента с помощью []....530
Математика массивов....531
Линейная алгебра....532
SciPy....533
pandas....533
Polars....535
DuckDB....536
Визуализация данных....536
Итоги и взгляд вперед....537
Упражнения....537
Глава 26. Искусственный интеллект....538
Как оказывается.......539
Экспертные системы....539
Перцептроны....539
Прорыв....540
Распознавание изображений: ImageNet и AlexNet....540
Большие языковые модели....541
Момент ChatGPT....541
Генерация, дополненная результатами поиска....541
Агенты....541
Эффективность....542
Создание моделей: фреймворки Python....542
Современные модели....543
Миллион моделей: Hugging Face....544
Рабочие примеры с использованием Ollama....544
Установка Ollama....545
Выбор модели....545
Выбор другой модели....547
Ссылки Ollama....549
Ссылки....550
Итоги и взгляд вперед....550
Упражнения....551
Глава 27. Производительность....552
Аппаратное обеспечение....552
Измерение времени....554
Профилирование....558
Алгоритмы и структуры данных....559
Массивы, списки и кортежи....560
Кэш....560
Cython....561
NumPy и SciPy....561
Расширения на C или Rust....561
Taichi....562
PyPy....562
Numba....562
Стандартный JIT-компилятор Python....563
Mojo....564
Предыстория....564
Архитектура....565
Примеры....566
Ограничения....566
Заключение....566
Итоги и взгляд вперед....567
Упражнения....567
Приложение. Ответы к упражнениям....568
Глава 2. Типы данных и переменные....568
Глава 3. Числа....569
Глава 4. Cтроки....570
Глава 5. Строки и массивы байтов....573
Глава 6. Операторы if и match....574
Глава 7. Операторы while и for....575
Глава 8. Кортежи и списки....576
Глава 9. Словари и множества....581
Глава 10. Функции....584
Глава 11. Объекты....586
Глава 12. Модули и пакеты....590
Глава 13. Среда разработки....591
Глава 14. Аннотации типов и документация....592
Глава 15. Тестирование....593
Глава 16. Отладка....594
Глава 17. Текстовые данные....595
Глава 18. Двоичные данные....598
Глава 19. Даты и время....599
Глава 20. Файлы....601
Глава 21. Данные во времени: конкурентность....602
Глава 22. Данные в пространстве: сети....602
Глава 23. Данные в коробке: надежные хранилища....607
Глава 24. Всемирная паутина....611
Глава 25. Наука о данных....613
Глава 26. Искусственный интеллект....613
Глава 27. Производительность....619
Об авторе....621
Иллюстрация на обложке....623
От издательства....33
Благодарности....34
Путешествие в мир программирования часто напоминает блуждание по лабиринту, из которого нет выхода. Неудивительно, что Python стал любимцем миллионов: он не просто понятен, его приятно изучать, читать и писать на нем.
Культовая книга Билла Любановича уже помогла тысячам разработчиков перейти на новый уровень. И вот долгожданное третье издание! Добавлены главы по ИИ, науке о данных и производительности; расширен охват сред разработки; добавлено обсуждение новейших возможностей Python; сделан акцент на использовании аннотаций типов; обновлено множество примеров и добавлено немало интересных подробностей; старая глава 19 («Быть питонщиком») превратилась в полноценную часть II.
Живой, остроумный стиль автора превращает чтение в удовольствие. А главное — вы не застрянете в теории. Подробные, практические проекты проведут вас по самым востребованным направлениям: веб-разработка, работа с базами данных, искусственный интеллект, сетевое программирование и не только.