Рецензия на книгу
Python 3. Самое необходимое

Дронов, Прохоренок

Обложка книги Python 3. Самое необходимое (Дронов, Прохоренок)

Краткая рецензия

Книга подойдет программистам на других языках, которым нужно быстро освоиться с питоном, а времени на какие-то самоучители для совсем новичков нет.

С одной стороны, в книге рассмотрены популярные python библиотеки, которые, действительно, часто применяются на практике. Но, с другой стороны, почти 100 страниц посвящены Tkinter, а далеко это не самая популярная библиотека.

Полная рецензия

Продолжаем поиск лучшей книги по Python для новичков и не только.

Сегодня на обзоре второе издание книги «Python 3, самое необходимое». И у книги два автора: Прохоренок и Дронов. Оба профессиональные программисты с большим опытом в web разработке на PHP, MySQL, JavaScript и так далее. Это довольно стандартный стек технологий, особенно на период становления интернета.

Как я сказал, в книге написано, что Дронов и Прохоренок — это профессиональные программисты, однако я бы их отнес к профессиональным техническим писателям. Помимо этой у них еще есть более 20 книг. И некоторые из них я также разберу.

Поэтому не забывайте подписаться на наш канал, чтобы не пропустить обзор.

Но вернемся к книге, и начнем с обложки, которая обещает познакомить нас с самым необходимым в Python: в том числе менеджером пакетов pip, работе с файлами и каталогами, базами данных, библиотекой Pillow, работе с сетями, потоками, а также построению оконных приложений с помощью Tkinter:

Обложка книги Python 3 Самое необходимое

Обложка книги «Python 3. Самое необходимое».

На счет последнего я не уверен, но вот всё то, что до Tkinter я действительно в том или ином виде использую в реальной работе.

При этом авторы обещают познакомить нас с Основами языка Python и это действительно основы, ни больше ни меньше. Хотя и этого достаточно, чтобы начать программировать на Питоне, однако за ручку вас тут вести не будут, книга не для новичков.

Уже во введении Прохоронек делает отсылки к ООП, колбэкам, упоминание байт-кода и другие термины, которые новичку в Python будут непонятны. А первые примеры циклов и исключений вы найдете уже на 23 странице, при том, что первые 10 — это оглавление.

Сразу обратите внимание, что авторы в первой строке используют комментарий, который сообщает о том, что код записан в кодировке utf-8:

Кодировка UTF-8 в Python 2

Кодировка UTF-8 в Python 2.

И это было актуально в Python второй версии. В Python 3 этот комментарий не нужен, так как в третьем питоне программу сразу нужно создавать в кодировке utf-8. И, если честно, я давно уже не встречал такой код. Хотя в книге он приводится часто.

Немного позже, на 27 странице, авторы приводят описание функции print(). И если до этого момента примеры с циклами, списками и исключениями можно было объяснить какой-то логикой повествования, то вот описание принта меня сильно насторожило.

Описание функции print()

Описание функции print().

Сам я прекрасно понимаю такую запись, и бывалые программисты тоже поймут, но новичка такое сложное описание функции и формальный подход может отпугнуть. Правда стоит отметить, что авторы отлично всё рассказывают и приводят массу примеров, прочитав которые становится ясно как работает print() в разных ситуациях. Тем не менее именно эта запись дает четкое понимание, что книга не для новичков.

Следом за print(), всё также в первой главе, нас знакомят с менеджером пакетов pip, что с одной стороны, сразу расширяет количество потенциальных тем, которые мы можем узнать из книги, а с другой стороны еще выше поднимает планку.

Вторая глава посвящена переменным и первым делом авторы показывают способ как посмотреть встроенные ключевые слова, которые нельзя использовать в качестве имен переменных.

Ключевые слова Python

Ключевые слова Python.

Обратите внимание, что тут нет print, save или input, которые приводила в пример Никола Лейси. Конечно, если бы она купила скучную «Python, самое необходимое« Дронова, и не поленилась бы выполнить две простые операции, то этой досадной опечатки в «Python, например» не было бы. Но они там есть.

Далее в книге «Python 3 самое необходимое» идут краткие описания и примеры работающего кода. Включая работу с различными типами данных: числами, строками, списками, кортежами, словарями, датой и временем. Тут же вы найдете информацию о регулярных выражениях, что на самом деле круто.

Вообще, я мог бы и дальше рассказывать вам об особенностях каждой из глав, но дело в том, что тут нечего рассказывать. По сути, книга является просто справочником по Python.

И она очень похожа на Простой Python Билла Любановича или Экспресс-курс Наоми Седдер.

Все они примерно об одном: общее описание синтаксиса и возможностей языка, знакомство с популярными библиотеками, большое число небольших фрагментов рабочего кода.

Единственное данная книга несколько толще аналогов, но если мы уберем из неё 100 страниц, которые посвящены созданию приложений на Tkinter, то объем будет сопоставим.

При этом Tkinter — это не самое необходимое. Я специально вбил Tkinter в поиск хед хантера и как вы думаете сколько вакансий требуют его знания? Ноль. Именно столько вакансий вы найдете. Хотя иногда пара-тройка предложений появляется.

Так что Tkinter можно смело отсюда выкинуть, а вот модуль requests для работы с сетью, а также SQLAlchemy для баз данных следовало бы, наоборот, добавить. Но тут их нет. Или можно было заменить Tkinter на Django или Flask, или на Pandas. Pandas упоминается в 320 вакансиях. И вот как раз из-за таких недоработок, книга получает чуть меньший рейтинг чем аналоги.

Но, перед тем как перейти к выводам, хочу рассказать об одном интересном приеме по работе с SQLite, который я тут подсмотрел. К слову, этот прием есть и в официальной документации Python, но раньше я этого не видел.

Итак, при создании баз данных или таблиц в базе данных, мы можем указать параметр COLLATE или COLLATION, который отвечает за сортировку данных.

Это может быть что-то вроде "ru_RU.UTF-8". То есть сортируем данные по правилам русского языка. Такие правила, например, описывают как сортировать слова содержащие буквы Е и Ё. «Ёлка» и «Елка» — это одно и тоже, и они должны стоять рядом, или же это разные слова? Так вот COLLATION как раз за это и отвечает.

Обычно, такие наборы правил скачиваются и устанавливаются отдельно. А уже после мы говорим базе данных, какой COLLATE использовать. То есть эти правила создают программисты или специалисты по языку, а мы используем уже готовые.

Так вот, а в SQLite мы можем создавать собственные COLLATE правила с помощью обычных python-функций.

Представим, что нам нужно отсортировать список стран в базе данных так, чтобы первые четыре были Россия, Украина, Беларусь и Казахстан, а остальные шли ниже в алфавитном порядке.

Обычно такие вещи я делаю на уровне Python после того, как получу список стран из базы данных. Но Python и SQLite позволяет производить такую сортировку на уровне базы данных. То есть мы создаем collate с помощью Python функции, скармливаем её базе данных, она сама сортирует таблицу в соответствии с нашими правилами и выдает уже готовый результат. Причем делается это реально просто:

# Скачать базу данных можно по ссылке
import sqlite3

# Подключаемя к базе данных
connection = sqlite3.connect("shop.db", isolation_level=None)
cursor = connection.cursor()

# Функция сравнения
def countries_collate(country1, country2):
    country1 = country1.lower()
    country2 = country2.lower()

    # Веса стран
    countries = {
        "россия": 4,
        "украина": 3,
        "беларусь": 2,
        "казахстан": 1 
    }

    # Алгоритм сравнения:
    if country1 in countries and country2 in countries:
        country1 = countries[country1]
        country2 = countries[country2]
        return -1 if country1 > country2 else 1 
    elif country1 in countries and country2 not in countries:
        return -1
    elif country1 not in countries and country2 in countries:
        return 1 
    else:
        if country1 > country2:
            return 1 
        elif country1 == country2:
            return 0 
        else:
            return -1

# Создаем и используем collcation
connection.create_collation("countries_collate", countries_collate)
cursor.execute("SELECT * FROM countries ORDER BY name COLLATE countries_collate")

for country in cursor:
    _id, name = country
    print(f"{_id:<4} {name}")

Что ж, настало время итогов. И в целом книга неплохая, да, некоторые вещи вроде Tkinter тут неуместны, а кое-каких явно не хватает. Но в остальном книга хорошая: всё лаконично, примеры рабочие, описания понятные. Всё то, что авторы обещают на обложке, в книге есть.

И лучше всего она подойдет программистам на других языках. Если вам нужно быстро освоиться с питоном, а времени на какие-то самоучители для совсем новичков у вас нет, то можете смело брать эту книгу.