Разъяснивший Python
8.17K subscribers
2.43K photos
40 videos
30 files
2.28K links
Твой проводник в омут Python'а

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

Канал на бирже: https://telega.in/c/python_pssss
Download Telegram
Очистка текста с помощью str.translate и str.maketrans

Когда нужно быстро удалить нежелательные символы (например, знаки препинания) из строки, не нужно писать цикл — str.translate делает это мгновенно.

Итог:
Сочетание str.translate и str.maketrans — суперэффективный способ удаления символов из строки без регулярных выражений. Удобно, читаемо и быстро!

Разъяснивший Python
Бонусный прием

В PEP 654 были объявлены группы исключений (Exception Groups): они позволяют заложить в одну строку except сразу несколько типов ошибок.

Если исследовать типы ошибок нет времени, можно на скорую руку заложить в такую группу все популярные ошибки и обернуть блоком try — except всю программу.

Разъяснивший Python
1
Безопасная подстановка значений в SQL — не через f-строки!

Никогда не вставляй пользовательские данные напрямую в SQL-запросы. Используй параметризацию — это защищает от SQL-инъекций и делает код надёжнее.

Разъяснивший Python
💯1
Как реализовать анти-спам бота?

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

Читать...

Разъяснивший Python
Атрибуты класса и атрибуты экземпляра (ч.1)

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

Разъяснивший Python
Атрибуты класса и атрибуты экземпляра (ч.2)

+= Оператор изменяет изменяемый объект на месте, не создавая новый объект. Таким образом, изменение атрибута одного экземпляра влияет на другие экземпляры, а также на атрибут class.

Разъяснивший Python
Уступая от ... return! (ч.1)

Куда "wtf" делся? Это из-за какого-то особого эффекта yield from?

Начиная с Python 3.3, стало возможным использовать return инструкцию со значениями внутри генераторов (см. PEP380). В официальных документах говорится, что,
"... return expr в генераторе возникают причины StopIteration(expr), которые возникают при выходе из генератора".

Разъяснивший Python
Уступая от ... return! (ч.2)

В случае с some_func(3), StopIteration возникает в начале из-за return заявления. StopIteration Исключение автоматически перехватывается внутри list(...) оболочки и for цикла. Следовательно, два приведенных выше фрагмента приводят к пустому списку.

Чтобы получить ["wtf"] от генератора some_func, нам нужно перехватить StopIteration исключение.

Разъяснивший Python
Условное присваивание с оператором or

Иногда нужно задать значение по умолчанию, если переменная пуста или None. Вместо длинной конструкции if, можно использовать короткий трюк.

Итог:
Оператор or — удобный способ задать значение по умолчанию, когда переменная может быть пустой, None, 0 или ''. Упрощает код и делает его чище.

Разъяснивший Python
Nan-рефлексивность (ч.1)

'inf' и 'nan' - это специальные строки (без учета регистра), которые при явном приведении к float типу используются для представления математической "бесконечности" и "не числа" соответственно.

Поскольку, согласно стандартам IEEE NaN != NaN, соблюдение этого правила нарушает предположение о рефлексивности элемента коллекции в Python, т. Е. если x является частью коллекции, подобной list, реализации, подобные comparison, основаны на предположении, что x == x.

Разъяснивший Python
Используй enumerate вместо счётчиков вручную

Когда нужно одновременно итерироваться по элементам и знать их индекс — не нужно делать это вручную!

Итог:
enumerate — твой друг при работе с индексами в цикле. Это Pythonic и избавляет от лишнего кода.

Разъяснивший Python
Распаковка словаря в аргументы функции

Иногда нужно передать значения из словаря в функцию — можно сделать это красиво и лаконично.

data автоматически распакует ключи словаря как имена аргументов, а значения — как аргументы функции.

Итог:
Когда у тебя есть словарь с нужными данными, не передавай каждый параметр вручную — просто используй
. Это сокращает код и повышает читаемость.

Разъяснивший Python
Nan-рефлексивность (ч.2)

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

Поскольку идентификаторы x и y различны, учитываются значения, которые также различны; следовательно, сравнение возвращается False на этот раз.

Разъяснивший Python
Быстрая проверка времени выполнения с timeit

Иногда нужно быстро узнать, сколько времени занимает тот или иной фрагмент кода. Вместо написания таймеров — используй модуль timeit.

Модуль timeit точно измеряет производительность фрагмента кода и учитывает мелкие колебания времени.

Итог:
timeit — отличный инструмент для быстрой и точной оценки производительности. Удобен для сравнений разных реализаций алгоритмов и оптимизаций.

Разъяснивший Python
Распознаватель PDF-счетов

Данный проект позволяет извлекать нужные даннгые из PDF-документов. Работает следующим образом: сначала читается текст из PDF, находим дату, номер, сумму и поставщика, а затем сохраняем данные в JSON. При желании ты можешь переделать поиск под свои нужды.

Ссылка на код

Разъяснивший Python
"Изменение" неизменяемого! (ч.1)

Это может показаться тривиальным, если вы знаете, как работают ссылки в Python.

Цитирую из https://docs.python.org/3/reference/datamodel.html

Неизменяемые последовательности Объект неизменяемого типа последовательности не может измениться после его создания. (Если объект содержит ссылки на другие объекты, эти другие объекты могут быть изменяемыми и могут быть изменены; однако коллекция объектов, на которые непосредственно ссылается неизменяемый объект, не может измениться.)

Разъяснивший Python
Исчезающая переменная из внешней области (ч.1)

Когда исключение было назначено с использованием as target, оно очищается в конце except предложения.

Это означает, что исключению должно быть присвоено другое имя, чтобы иметь возможность ссылаться на него после предложения except. Исключения удаляются, потому что с привязкой к ним обратной трассировки они образуют ссылочный цикл с фреймом стека, сохраняя все локальные файлы в этом фрейме живыми до тех пор, пока не произойдет следующая сборка мусора.

Разъяснивший Python
Проверка типов переменной с помощью typing.get_origin и typing.get_args

Когда ты работаешь с аннотациями типов (особенно с Union, List[int], Optional[str] и т.п.), стандартной проверки isinstance() недостаточно.

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

Итог:
С помощью get_origin и get_args ты можешь "распаковать" сложные типы и точно понимать, что за структура стоит за аннотацией. Очень полезно при создании универсальных функций или фреймворков.

Разъяснивший Python
Исчезающая переменная из внешней области (ч.2)

Эти предложения не ограничены в Python. Все в примере присутствует в той же области видимости, а переменная e была удалена из-за выполнения except предложения. То же самое не относится к функциям, которые имеют свои отдельные внутренние области.

В Python 2.x имя переменной e присваивается Exception() экземпляру, поэтому при попытке печати ничего не выводится.

Разъяснивший Python