Python tricks | Хитрости Питона
5.75K subscribers
2.21K photos
26 videos
1 file
2.52K links
Здесь вы найдете лучшие практики и приёмы, которые используют опытные программисты.

Сотрудничество: @SIeep_Token

Мы на платформе: https://telegram.me/python_tricks

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
Защита от SQL-инъекций

Безопасники скажут вам, что: внутрь текста (например, в поле анкеты) можно внедрить SQL-запрос и даже дропнуть базу данных. Но не дай бог нам с вами увидеть такое на проде.

Начиная с Python 3.11 мы можем использовать LiteralString во избежание таких уязвимостей.

🔗 Python tricks
Импорт

В версии Python 3.12 наконец стало возможным импортировать модули в адекватном для английского языка порядке слов!

🔗 Python tricks
TypeVarTuple

Допустим, мы создаём функцию convert_first_int(), которая возвращает кортеж практически неизменным, только первый элемент приводит к целочисленному типу.

TypeVarTuple представляет собой произвольный кортеж потенциально разных типов. Полезно, если функция имеет дело только с первым элементом кортежа, и нам «разрешит» любые оставшиеся типы.

🔗 Python tricks
Pretty Print словаря

Выводить многоуровневые словари с print() — боль: разрывы строк исчезнут, файл станет нечитаемым.

Но встроенная утилита pprint, выдаст в командной строке «причёсанный» словарь.

🔗 Python tricks
set.isdisjoint

Метод isdisjoint() возвращает значение True, если два множества не имеют между собой общих элементов. В противном случае возвращается False. Ты также можешь передавать итерации, такие как список, кортеж, словарь или строку. В этом случае isdisjoint() сначала преобразует итерации в множества. Затем происходит проверка, не являются ли они непересекающимися.

🔗 Python tricks
Включение генераторов, сетов

Раньше был эффективный способ генерировать списки — «списковое включение» (List Comprehension).

Оказывается, этому поддаются и другие составные типы — генераторы и сеты.

🔗 Python tricks
Оператор match для проверки типа

Теперь освоение новых библиотек у вас точно ускорится.

Порой, трудно понять, какой тип данных возвращает функция или метод. В таких случаях помогают match и встроенные функции приведения к тому или иному типу данных.

🔗 Python tricks
MySQL: LEFT JOIN

LEFT JOIN возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если нет соответствующих строк в правой таблице, то будут возвращены NULL значения. В этом примере мы объединяем таблицы customers и orders по столбцу id из customers и customer id из orders, используя LEFT JOIN.

🔗 Python tricks
try / except + else + finally

Мастхэв для начинающих питонистов — пара try / except, обработчик исключений. Шикарным дополнением к такому блоку является, на мой взгляд, else: он опишет поведение программы на случай других ошибок, которых может быть немало!

Более того, добавив finally, вы выполните завершающие работы, например, скомандуете выслать уведомление

🔗 Python tricks
Автоматическое добавление ключа словарю

Если создать словарь средствами collections.defaultdict, добавить хотя бы один элемент, а затем обратиться к несуществующему ключу.

🔗 Python tricks
Проверка существования переменной с помощью «моржового» оператора

Если мы объявили две переменные, но не задали любой из них значение, то с помощью оператора := (Walrus Operator) можно спасти программу от падения и добавить обрабатывающую логику. В первом случае, в переменные name1, name2 мы ничего не записали, значит, программа зайдет в блок else.

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

🔗 Python tricks
Проверка наличия элемента в множестве

Мы можем проверить, находится ли тот или иной элемент в списке с помощью оператора in.

То же применимо и для множеств (set).

🔗 Python tricks
Перегонка кортежа в словарь

Допустим, у нас есть кортеж, где каждое значение – строка из двух символов.

Если «навесить» функцию dict(), то в результате мы получим словарь с разделенными на ключ – значение парами.

🔗 Python tricks
chr

chr() используется для преобразования целого числа (Unicode кода символа) в соответствующий символ. Например, chr(65) вернет символ 'A', так как код символа 'A' равен 65. Выдается ошибка ValueError, если целое число выходит за пределы диапазона. TypeError — для нецелого аргумента.

🔗 Python tricks
Поиск отличий в списках

Допустим, у нас есть две длинные строки, и мы хотим найти отличия. seq1 и seq2 в сниппете ниже – это последовательности генов.

Можно использовать комбинацию zip() и enumerate(). Первая сопоставит символы с одинаковыми индексами, а вторая – присвоит каждой паре символов порядковый номер (всего 24). Чтобы найти отличающиеся символы, достаточно сравнить символы попарно в цикле for.

🔗 Python tricks
Подсчёт числа элементов в списке

Помимо способности collections.Counter() понимать, что именно в строке нужно подсчитать.

В случае со списком слов модуль автоматически рассчитывает, как часто встречается то или иное слово.

🔗 Python tricks
Фильтрация списка без цикла

Здесь неожиданно выделился модуль itertools. Если у нас есть два списка с именами и идентификаторами.

То вы можете выбрать из списка leaders только те, где значения selector равны единице.

🔗 Python tricks
Splat-оператор

Splat (одна звездочка) расширяет коллекцию до позиционных аргументов, а splatty-splat (две звездочки) — словарь до именованных аргументов.

🔗 Python tricks
Резервирование символов

С помощью операторов > / < / ^ вы можете добавлять выходному значению символы, к примеру, облегчающие поиск среди других выходных значений.

Как видно в сниппете, < добавит символы после, > – до, а ^ – окружит с двух сторон.

🔗 Python tricks
eval

Функция eval() используется для выполнения выражения, переданного в виде строки. Она принимает строку в качестве аргумента и выполняет её как код Python. Например, если у тебя есть строка "2 + 3", то eval("2 + 3") вернет результат сложения, то есть 5.

🔗 Python tricks