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

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

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

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
Охватывающая (Enclosing)

Позволяет «выходить» из локальной о.в. на верхний уровень — но не глобальный. Допустим, у нас есть функция func1(), в которой определена еще одна функция func2(). Оператор nonlocal позволяет внутренней переменной enclosing выйти на уровень видимости «верховной» функции.

Такие звери нужны, если вы используете вложенные функции, что в целом случается нечасто. Самый простой пример употребления – цикл внутри цикла, счетчик i и снаружи, и внутри.

🔗 Python tricks
Локальная (Local) и глобальная (Global)

Сразу видно глобальную переменную – global. Она удобна в использовании, но не безопасна. При разрастающемся коде легко добиться ситуации, что переменная меняется несколько раз, и это создает лазейки для ее перезаписи всем желающим. Впрочем, за семь лет программирования проблемных ситуаций на этой почве у меня не возникло ни разу. Но информационной безопасностью не занимаюсь.

Заполучить вторую переменную local в сниппете ниже можно только при вызове func().

🔗 Python tricks
Что нового в Python 3.12. Псевдонимы типов

Если мы объявим кортеж Point, который состоит из двух чисел с плавающей запятой, и собираемся создавать его экземпляры, с этим поможет инструкция type.

🔗 Python tricks
Что нового в Python 3.12. Перезапись декоратора

Если у нас есть класс Base c методом get_color(), и в наследном классе GoodChild мы хотим эту функцию переопределить, то инструкцией @override это сделать очень просто.

🔗 Python tricks
Что нового в Python 3.12. TypedDict для определения типов **kwargs

Если вам доводилось налегать на kwargs (keyword arguments – аргументы c ключевыми словами), то вы помните, что оператор двойная звездочка издавна упаковывает аргументы, переданные по имени, в словарь.

Теперь мы можем использовать TypedDict (буквально – словарь с заданными типами значений) для того, чтобы такие аргументы получили большую свободу типов.

🔗 Python tricks
MySQL: SELECT

SELECT используется для извлечения данных из базы данных MySQL. Эта операция позволяет выбрать определенные столбцы и строки из таблицы или таблиц базы данных. Обрати внимание на пример. fetchall() извлекает все строки из последнего выполненного оператора.

🔗 Python tricks
Что нового в Python 3.12. Порядок слов в инструкции импорта

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

🔗 Python tricks
Что нового в Python 3.12. Обратная косая черта в f-строках

До Python 3.12 использовать backslash в интерполируемых строках было нельзя. Теперь же мы смело можем внедрять и разрывы строк (\n), и переносы кареток (\r), и другие подобные символы.

🔗 Python tricks
Что нового в Python 3.12. Переиспользование кавычек в f-строках

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

🔗 Python tricks
Что нового в Python 3.12. Улучшенный подсказки для импорта

Если вы забыли подтянуть библиотеку инструкцией import, то теперь интерпретатор вежливо подскажет (‘did you forget...’) и укажет на опечатки в названии подключаемого модуля.

🔗 Python tricks
Защита от 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