Введение 11

Глава 1. Первые шаги 13
1.1. Установка Python 13
1.1.1. Установка нескольких интерпретаторов Python 17
1.1.2. Запуск программы с помощью разных версий Python 18
1.2. Первая программа на Python 20
1.3. Структура программы 22
1.4. Комментарии 24
1.5. Дополнительные возможности IDLE 25
1.6. Вывод результатов работы программы 27
1.7. Ввод данных 29
1.8. Доступ к документации 30
1.9. Утилита pip: установка дополнительных библиотек 33

Глава 2. Переменные 38
2.1. Именование переменных 38
2.2. Типы данных 40
2.3. Присваивание значения переменным 43
2.4. Проверка типа данных 45
2.5. Преобразование типов данных 46
2.6. Удаление переменной 49

Глава 3. Операторы 50
3.1. Математические операторы 50
3.2. Двоичные операторы 52
3.3. Операторы для работы с последовательностями 53
3.4. Операторы присваивания 54
3.5. Приоритет выполнения операторов 55

Глава 4. Условные операторы и циклы 57
4.1. Операторы сравнения 58
4.2. Оператор ветвления if else 60
4.3. Цикл for 63
4.4. Функции range() и enumerate() 65
4.5. Цикл while 68
4.6. Оператор continue: переход на следующую итерацию цикла 69
4.7. Оператор break: прерывание цикла 69

Глава 5. Числа 71
5.1. Встроенные функции и методы для работы с числами 73
5.2. Модуль math. Математические функции 75
5.3. Модуль random. Генерация случайных чисел 76

Глава 6. Строки и двоичные данные 79
6.1. Создание строки 80
6.2. Специальные символы 83
6.3. Операции над строками 84
6.4. Форматирование строк 87
6.5. Метод format() 93
6.5.1. Форматируемые строки 96
6.6. Функции и методы для работы со строками 97
6.7. Настройка локали 100
6.8. Изменение регистра символов 101
6.9. Функции для работы с символами 102
6.10. Поиск и замена в строке 102
6.11. Проверка типа содержимого строки 106
6.12. Вычисление выражений, заданных в виде строк 109
6.13. Тип данных bytes 109
6.14. Тип данных bytearray 113
6.15. Преобразование объекта в последовательность байтов 117
6.16. Шифрование строк 117

Глава 7. Регулярные выражения 120
7.1. Синтаксис регулярных выражений 120
7.2. Поиск первого совпадения с шаблоном 129
7.3. Поиск всех совпадений с шаблоном 134
7.4. Замена в строке 135
7.5. Прочие функции и методы 137

Глава 8. Списки, кортежи, множества и диапазоны 139
8.1. Создание списка 140
8.2. Операции над списками 143
8.3. Многомерные списки 146
8.4. Перебор элементов списка 146
8.5. Генераторы списков и выражения-генераторы 147
8.6. Функции map(), zip(), filter() и reduce() 149
8.7. Добавление и удаление элементов списка 152
8.8. Поиск элемента в списке и получение сведений о значениях, входящих в
список 154
8.9. Переворачивание и перемешивание списка 155
8.10. Выбор элементов случайным образом 156
8.11. Сортировка списка 156
8.12. Заполнение списка числами 157
8.13. Преобразование списка в строку 158
8.14. Кортежи 159
8.15. Множества 160
8.16. Диапазоны 165
8.17. Модуль itertools 167
8.17.1. Генерирование неопределенного количества значений 167
8.17.2. Генерирование комбинаций значений 168
8.17.3. Фильтрация элементов последовательности 169
8.17.4. Прочие функции 170

Глава 9. Словари 173
9.1. Создание словаря 173
9.2. Операции над словарями 176
9.3. Перебор элементов словаря 177
9.4. Методы для работы со словарями 178
9.5. Генераторы словарей 181

Глава 10. Работа с датой и временем 182
10.1. Получение текущих даты и времени 182
10.2. Форматирование даты и времени 184
10.3. «Засыпание» скрипта 186
10.4. Модуль datetime: манипуляции датой и временем 186
10.4.1. Класс timedelta 187
10.4.2. Класс date 189
10.4.3. Класс time 192
10.4.4. Класс datetime 194
10.5. Модуль calendar: вывод календаря 199
10.5.1. Методы классов TextCalendar и LocaleTextCalendar 201
10.5.2. Методы классов HTMLCalendar и LocaleHTMLCalendar 202
10.5.3. Другие полезные функции 203
10.6. Измерение времени выполнения фрагментов кода 206

Глава 11. Пользовательские функции 209
11.1. Определение функции и ее вызов 209
11.2. Расположение определений функций 212
11.3. Необязательные параметры и сопоставление по ключам 213
11.4. Переменное число параметров в функции 216
11.5. Анонимные функции 218
11.6. Функции-генераторы 219
11.7. Декораторы функций 221
11.8. Рекурсия. Вычисление факториала 223
11.9. Глобальные и локальные переменные 224
11.10. Вложенные функции 227
11.11. Аннотации функций 229

Глава 12. Модули и пакеты 231
12.1. Инструкция import 231
12.2. Инструкция from 234
12.3. Пути поиска модулей 237
12.4. Повторная загрузка модулей 238
12.5. Пакеты 239

Глава 13. Объектно-ориентированное программирование 244
13.1. Определение класса и создание экземпляра класса 244
13.2. Методы __init__() и __del__() 248
13.3. Наследование 248
13.4. Множественное наследование 250
13.4.1. Примеси и их использование 252
13.5. Специальные методы 253
13.6. Перегрузка операторов 255
13.7. Статические методы и методы класса 258
13.8. Абстрактные методы 259
13.9. Ограничение доступа к идентификаторам внутри класса 260
13.10. Свойства класса 261
13.11. Декораторы классов 263

Глава 14. Обработка исключений 264
14.1. Инструкция try except else finally 265
14.2. Инструкция with as 269
14.3. Классы встроенных исключений 271
14.4. Пользовательские исключения 273

Глава 15. Итераторы, контейнеры и перечисления 277
15.1. Итераторы 278
15.2. Контейнеры 279
15.2.1. Контейнеры-последовательности 279
15.2.2. Контейнеры-словари 281
15.3. Перечисления 282

Глава 16. Работа с файлами и каталогами 287
16.1. Открытие файла 287
16.2. Методы для работы с файлами 294
16.3. Доступ к файлам с помощью модуля os 299
16.4. Классы StringIO и BytesIO 302
16.5. Права доступа к файлам и каталогам 306
16.6. Функции для манипулирования файлами 307
16.7. Преобразование пути к файлу или каталогу 311
16.8. Перенаправление ввода/вывода 313
16.9. Сохранение объектов в файл 316
16.10. Функции для работы с каталогами 319
16.10.1. Функция scandir() 322
16.11. Исключения, возбуждаемые файловыми операциями 324

Глава 17. Основы SQLite 326
17.1. Создание базы данных 326
17.2. Создание таблицы 328
17.3. Вставка записей 334
17.4. Обновление и удаление записей 337
17.5. Изменение структуры таблицы 337
17.6. Выбор записей 338
17.7. Выбор записей из нескольких таблиц 341
17.8. Условия в инструкциях WHERE и HAVING 343
17.9. Индексы 346
17.10. Вложенные запросы 348
17.11. Транзакции 349
17.12. Удаление таблицы и базы данных 352

Глава 18. Доступ из Python к базам данных SQLite 353
18.1. Создание и открытие базы данных 354
18.2. Выполнение запросов 355
18.3. Обработка результата запроса 360
18.4. Управление транзакциями 363
18.5. Указание пользовательской сортировки 365
18.6. Поиск без учета регистра символов 366
18.7. Создание агрегатных функций 368
18.8. Преобразование типов данных 368
18.9. Сохранение в таблице даты и времени 372
18.10. Обработка исключений 373
18.11. Трассировка выполняемых запросов 376

Глава 19. Доступ из Python к базам данных MySQL 377
19.1. Библиотека MySQLClient 378
19.1.1. Подключение к базе данных 378
19.1.2. Выполнение запросов 380
19.1.3. Обработка результата запроса 384
19.2. Библиотека PyODBC 386
19.2.1. Подключение к базе данных 387
19.2.2. Выполнение запросов 388
19.2.3. Обработка результата запроса 390

Глава 20. Работа с графикой 394
20.1. Загрузка готового изображения 394
20.2. Создание нового изображения 396
20.3. Получение информации об изображении 397
20.4. Манипулирование изображением 398
20.5. Рисование линий и фигур 402
20.6. Библиотека Wand 404
20.7. Вывод текста 410
20.8. Создание скриншотов 414

Глава 21. Интернет-программирование 416
21.1. Разбор URL-адреса 416
21.2. Кодирование и декодирование строки запроса 419
21.3. Преобразование относительного URL-адреса в абсолютный 423
21.4. Разбор HTML-эквивалентов 423
21.5. Обмен данными по протоколу HTTP 425
21.6. Обмен данными с помощью модуля urllib.request 431
21.7. Определение кодировки 434
21.8. Работа с данными в формате JSON 435

Глава 22. Библиотека Tkinter. Основы разработки оконных приложений 441
22.1. Введение в Tkinter 441
22.1.1. Первое приложение на Tkinter 441
22.1.2. Разбор кода первого приложения 442
22.2. Связывание компонентов с данными. Метапеременные 446
22.3. Обработка событий 448
22.3.1. Привязка обработчиков к событиям 449
22.3.2. События и их наименования 450
22.3.3. Дополнительные сведения о событии. Класс Event 452
22.3.4. Виртуальные события 453
22.3.5. Генерирование событий 455
22.3.6. Перехват событий 455
22.4. Указание опций у компонентов 456
22.5. Размещение компонентов в контейнерах. Диспетчеры компоновки 456
22.5.1. Pack: выстраивание компонентов вдоль сторон контейнера 457
22.5.2. Place: фиксированное расположение компонентов 460
22.5.3. Grid: выстраивание компонентов по сетке 463
22.5.4. Использование вложенных контейнеров 468
22.5.5. Размещение компонентов непосредственно в окне 469
22.5.6. Адаптивный интерфейс и его реализация 470
22.6. Работа с окнами 471
22.6.1. Управление окнами 471
22.6.2. Получение сведений об экранной подсистеме 474
22.6.3. Вывод вторичных окон 475
Вывод обычных вторичных окон 475
Вывод модальных вторичных окон 478
22.7. Управление жизненным циклом приложения 479
22.8. Взаимодействие с операционной системой 481
22.9. Обработка ошибок 481

Глава 23. Библиотека Tkinter. Компоненты и вспомогательные классы 482
23.1. Стилизуемые компоненты 482
23.1.1. Опции и методы, поддерживаемые всеми стилизуемыми компонентами 482
23.1.2. Компонент Frame: панель 486
23.1.3. Компонент Button: кнопка 486
23.1.4. Компонент Entry: поле ввода 488
Задание шрифта 490
Проверка введенного значения на правильность 492
23.1.5. Компонент Label: надпись 494
23.1.6. Компонент Checkbutton: флажок 495
23.1.7. Компонент Radiobutton: переключатель 497
23.1.8. Компонент Combobox: раскрывающийся список 498
23.1.9. Компонент Scale: регулятор 500
23.1.10. Компонент LabelFrame: панель с заголовком 501
23.1.11. Компонент Notebook: панель с вкладками 502
23.1.12. Компонент Progressbar: индикатор процесса 505
23.1.13. Компонент Sizegrip: захват для изменения размеров окна 506
23.1.14. Компонент Treeview: иерархический список 506
Реализация прокрутки в компоненте Treeview. Компонент Scrollbar 515
23.1.15. Настройка внешнего вида стилизуемых компонентов 516
Использование тем 516
Указание стилей 517
Стили состояний 518
23.2. Нестилизуемые компоненты 519
23.2.1. Компонент Listbox: список 520
Реализация прокрутки в компоненте Listbox 523
23.2.2. Компонент Spinbox: поле ввода со счетчиком 524
23.2.3. Компонент PanedWindow: панель с разделителями 527
23.2.4. Компонент Menu: меню 530
Опции самого компонента Menu 530
Опции пункта меню 531
Методы компонента Menu 533
Создание главного меню 534
Создание контекстного меню 535
Компонент Menubutton: кнопка с меню 536
23.3. Обработка «горячих клавиш» 537
23.4. Стандартные диалоговые окна 539
23.4.1. Вывод окон-сообщений 539
23.4.2. Вывод диалоговых окон открытия и сохранения файла 541

Глава 24. Параллельное программирование 542
24.1. Высокоуровневые инструменты 543
24.1.1. Выполнение параллельных задач 543
24.1.2. Планировщик заданий 547
24.2. Многопоточное программирование 549
24.2.1. Класс Thread: поток 549
24.2.2. Локальные данные потока 552
24.2.3. Использование блокировок 552
24.2.4. Кондиции 554
24.2.5. События потоков 557
24.2.6. Барьеры 558
24.2.7. Потоковый таймер 560
24.2.8. Служебные функции 560
24.3. Очередь 561

Глава 25. Работа с архивами 564
25.1. Сжатие и распаковка по алгоритму GZIP 564
25.2. Сжатие и распаковка по алгоритму BZIP2 566
25.3. Сжатие и распаковка по алгоритму LZMA 568
25.4. Работа с архивами ZIP 571
25.5. Работа с архивами TAR 575

Заключение 581

Приложение. Описание электронного архива 583

Предметный указатель 585