python_practics
5.14K subscribers
1.86K photos
205 videos
119 files
60 links
Python - обучающие материалы, полезные советы и статьи.

Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront

Купить рекламу: https://telega.in/c/python_practics
Download Telegram
Быстрая проверка наличия подстроки в Python

👍 - если было полезно

@python_practics | #полезные_сниппеты
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Восстание машин уже близко. Скоро тоже будут искать вторую работу и жаловаться на вайб-кодеров.

@python_practics | #мемчики
❤8🔥2👍1
Айти “умирает”, вакансий нет, все говорят про кризис?
В канале “Frontend менторинг | Косилов” разбираю, что реально происходит на рынке и как всё-таки находить офферы.

Там: честные зарплатные вилки, разборы резюме и портфолио, стратегии поиска работы и роста в кризис, без инфоцыганства и розовых обещаний. Я действующий фронтенд-разработчик и ментор, показываю, как адаптироваться к рынку, а не ждать “когда всё наладится”.

Для тех, кто придёт отсюда, — скидка 30% на менторство и разборы по промокоду Kosilov2026.
Pendulum

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

Основные преимущества Pendulum:
1. Интуитивный синтаксис.
Создание, парсинг и форматирование дат выполняются просто и логично — без лишнего кода и сложных конструкций.
2. Удобная работа с часовыми поясами.
Pendulum позволяет легко управлять временными зонами, избавляя разработчика от типичных ошибок и путаницы с timezone.
3. Человекочитаемые интервалы.
Разницу между датами можно получить в понятном для человека формате, например: “2 дня назад” или “через 3 часа”.
4. Поддержка локализации.
Библиотека умеет форматировать даты на разных языках, что особенно полезно для международных проектов.
5. Иммутабельность объектов
Объекты Pendulum неизменяемы, что помогает избежать неожиданных изменений данных и повышает надежность кода.

@python_practics | #фреймворки_библиотеки
❤1
Польза модуля pickle

В чем польза модуля pickle для работы с данными в Python?

Посмотреть ответ.

@python_practics
👍2
🔍Тестовое собеседование на Middle Python с разработчиком из Авито завтра вечером

Уже завтра вечером в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.

Как это будет:
📂 Даня, старший разработчик в Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Даня будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Дане

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Python с нуля: автоматизируйте то, на что сейчас уходят часы

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

За короткий курс вы освоите базу Python с нуля и сразу начнёте применять её в рабочих задачах:
— объединять Excel-файлы
— обрабатывать большие таблицы
— строить сводные и графики
— работать с датами и текстом
— автоматизировать повторяющиеся действия

Без лишней теории — только база языка и практические задачи, которые помогают экономить время уже в процессе обучения. За несколько недель выучить язык с нуля
👉@tea4erman_bot
❤2🔥1
🧩 Какие из этих вызовов найдут совпадение?

import re
re.match("pi", "pi")
re.match("pi", "pie")
re.match("pi", "api")
re.match("pi", "magpie")


Только первые два. Функция re.match() ищет шаблон лишь в начале строки, но не требует совпадения до её конца. Чтобы искать где угодно, есть re.search(). Чтобы проверить всю строку целиком, есть re.fullmatch().

Такое половинчатое поведение многих удивляет. Поэтому в Python 3.15 появился re.prefixmatch(): тот же re.match(), но с говорящим именем. Сам re.match() получил мягкое устаревание (soft deprecation).

Это лишь пометка в документации. Предупреждений нет, удалять функцию не планируют. Код для старых версий Python может и дальше вызывать match(), а в новом лучше писать prefixmatch().

В оригинале есть таблица с аналогами через ^ и \A и готовое правило для линтера Ruff, которое ловит re.match() в проекте.

👍 - если было полезно

@python_practics
❤1👍1
🔑 Одна запись в urls.py, и менеджеры паролей найдут вашу страницу смены пароля

Менеджер паролей, заметив утёкший или повторяющийся пароль, может предложить его сменить. Но адрес этой страницы на каждом сайте свой.

Веб-спецификация резервирует для этого путь /.well-known/change-password. Он просто перенаправляет на вашу настоящую страницу. Его используют iCloud Keychain, Google Password Manager и 1Password.

В Django это выглядит так:

from django.urls import path
from django.views.generic import RedirectView

urlpatterns = [
# ...
path(
".well-known/change-password",
RedirectView.as_view(pattern_name="password_change"),
),
# ...
]


Имя password_change даёт встроенный django.contrib.auth.urls. Django проверяет его только при запросе, так что опечатка всплывёт, лишь когда кто-то откроет адрес.

В оригинале есть готовые тесты и второй служебный адрес с восхитительно длинным именем.

👍 - если было полезно

@python_practics
❤1
🔐 Кто-то нашёл дыру на вашем сайте. Куда ему написать?

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

Для этого есть стандарт security.txt (RFC 9116, 2022 год). Это текстовый файл по адресу /.well-known/security.txt:

# Security contact information for example.com
Contact: mailto:security@example.com
Expires: 2027-09-01T00:00:00Z
Preferred-Languages: en
Canonical: https://example.com/.well-known/security.txt
Policy: https://example.com/security/


В Django его отдаёт короткая view на FileResponse с явным text/plain; charset=utf-8.

Подвох в поле Expires: после этой даты файлу верить не стоит, а RFC советует ставить её меньше чем через год. Адам Джонсон ловит это встроенной проверкой Django (system check): за 30 дней до срока runserver, migrate и test начинают предупреждать, но ничего не блокируют.

👍 - если было полезно

@python_practics
👎1
🚀 Кэш для uvx в GitHub Actions без файла зависимостей

Команда uvx из менеджера пакетов uv запускает Python-утилиту одной строкой. Но в GitHub Actions пакет при каждом запуске заново качается с PyPI. Кэш обычно привязывают к хэшу requirements.txt, а заводить такой файл ради пары утилит не хочется.

Выручает переменная UV_EXCLUDE_NEWER. С ней uv ставит самые свежие версии пакетов на указанную дату. Пока дата та же, версии не меняются.

Эту же дату Саймон Уиллисон добавляет в ключ кэша через cache-suffix в astral-sh/setup-uv. Чтобы обновить утилиты и сбросить кэш, достаточно поменять дату в одном месте.

Учтите одно: когда кэш нашёлся, он включает UV_OFFLINE=1, и uv не ходит в сеть. Поэтому новая утилита, добавленная без смены даты, упадёт с ошибкой.

Весь рецепт умещается в один короткий workflow.

👍 - если было полезно

@python_practics
🎨 Код в Word можно подсветить текстом, а не вставлять картинкой

Когда .docx собирают из Python, код проще всего вставить скриншотом. Но такой код не скопировать, не найти через Ctrl+F и не поменять ему шрифт.

На Хабре разобрали модуль примерно на сто строк, который вставляет код текстом с подсветкой. Библиотека Pygments режет код на токены и для каждого сообщает цвет, жирность и курсив. А абзац в python-docx состоит из фрагментов (runs) со своим форматированием. Каждый токен просто становится фрагментом.

Соседние токены с одинаковым стилем склеиваются, а весь листинг остаётся одним абзацем. В замере на 30 листингах сборка заняла 0,6 с против 4,1 с с картинками.

Рамку и заливку пришлось задавать прямо в XML. Word тут строже LibreOffice: при неверном порядке тегов он может не открыть файл, так что проверять результат стоит именно в Word.

А ещё в статье есть подпись «Листинг N», которая нумеруется сама.

👍 - если было полезно

@python_practics
🔗 Как открыть ссылки на сайт прямо в его приложении

Если у сайта есть приложение для iOS или Android, ссылки на сайт могут открываться в нём. У Apple это Universal Links, у Android App Links.

Но приложение не может само объявить чужие ссылки своими, иначе их перехватило бы любое вредоносное приложение. Поэтому связь двусторонняя: приложение называет свои домены, а домен подтверждает, каким приложениям доверяет.

Со стороны сайта это JSON-файл: /.well-known/apple-app-site-association для Apple и /.well-known/assetlinks.json для Android. В Django их отдают два маленьких view: по HTTPS, ответ 200 без редиректов, content-type application/json.

Подвох в том, что ошибка в файле ничем себя не выдаёт. Ссылки просто открываются в браузере, и нигде нет ни одного сообщения.

Готовые view, тесты к ним и команды, чтобы после деплоя проверить, что видят Apple и Google, собраны в оригинале.

👍 - если было полезно

@python_practics
👍1