Фильтрация списков
Какой из вариантов кода правильно отфильтрует список:
Посмотреть ответ.
@python_practics
Какой из вариантов кода правильно отфильтрует список:
words = ['python', 'cat', 'java', 'dog', 'go'], чтобы оставить только слова длиной больше 3 символов?Посмотреть ответ.
@python_practics
Какой из вариантов кода правильно отфильтрует список words, чтобы остались только слова длиной больше 3-х символов?
Anonymous Quiz
21%
filtered_words = filter(len(w) > 3 for w in words).
25%
filtered_words = list(filter(lambda w: len(w) > 3, words)).
10%
filtered_words = list(map(lambda w: len(w) > 3, words)).
43%
filtered_words = [w for w in words if len(w) > 3].
👎4👍3
Каналы с Junior IT вакансиями
и стажировками
Подписывайся и забирай свой оффер
1. Стажировки и вакансии по России и миру
2. IT вакансии по СНГ
3. IT стажировки по СНГ
4. ИИ-ассистент для автооткликов
5. IT стажировки и волонтерства
6. IT стажировки в топовых компаниях мира
7. Удалённые IT вакансии и стажировки
8. Python вакансии и стажировки
9. БИГТЕХ вакансии и стажировки
10. Design вакансии и стажировки
11. QA вакансии и стажировки
12. Junior вакансии и стажировки
13. Frontend вакансии и вопросы собесов
14. Вакансии и стажировки для аналитиков
15. Вакансии в русских стартапах за границей
16. Вакансии и стажировки для DevOps
17. Вакансии, которых нет на ХХ.РУ
Please open Telegram to view this post
VIEW IN TELEGRAM
Динамическая типизация с typing.Protocol в Python
👍 - если было полезно
@python_practics
typing.Protocol из модуля typing позволяет задавать интерфейсы для классов без явного наследования, обеспечивая поддержку структурной типизации. Это особенно полезно для проверки совместимости объектов на основе их методов, а не явного наследования, что делает код более гибким.from typing import Protocol
class Flyable(Protocol):
def fly(self) -> None:
pass
# Классы, реализующие метод fly, автоматически считаются Flyable
class Bird:
def fly(self) -> None:
print("Bird is flying")
class Drone:
def fly(self) -> None:
print("Drone is flying")
# Функция, принимающая любой объект, соответствующий Flyable
def make_it_fly(obj: Flyable) -> None:
obj.fly()
# Тест
bird = Bird()
drone = Drone()
make_it_fly(bird) # Bird is flying
make_it_fly(drone) # Drone is flying
👍 - если было полезно
@python_practics
👍5❤2
Быстрая проверка наличия подстроки в Python
👍 - если было полезно
@python_practics | #полезные_сниппеты
👍 - если было полезно
@python_practics | #полезные_сниппеты
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Восстание машин уже близко. Скоро тоже будут искать вторую работу и жаловаться на вайб-кодеров.
@python_practics | #мемчики
@python_practics | #мемчики
❤8🔥2👍1
Айти “умирает”, вакансий нет, все говорят про кризис?
В канале “Frontend менторинг | Косилов” разбираю, что реально происходит на рынке и как всё-таки находить офферы.
Там: честные зарплатные вилки, разборы резюме и портфолио, стратегии поиска работы и роста в кризис, без инфоцыганства и розовых обещаний. Я действующий фронтенд-разработчик и ментор, показываю, как адаптироваться к рынку, а не ждать “когда всё наладится”.
Для тех, кто придёт отсюда, — скидка 30% на менторство и разборы по промокоду Kosilov2026.
В канале “Frontend менторинг | Косилов” разбираю, что реально происходит на рынке и как всё-таки находить офферы.
Там: честные зарплатные вилки, разборы резюме и портфолио, стратегии поиска работы и роста в кризис, без инфоцыганства и розовых обещаний. Я действующий фронтенд-разработчик и ментор, показываю, как адаптироваться к рынку, а не ждать “когда всё наладится”.
Для тех, кто придёт отсюда, — скидка 30% на менторство и разборы по промокоду Kosilov2026.
Pendulum
Если стандартный модуль datetime кажется громоздким и неудобным, библиотека Pendulum предлагает более элегантное и мощное решение. Она упрощает работу с датами, временем и часовыми поясами, делая код чище и понятнее.
Основные преимущества Pendulum:
1. Интуитивный синтаксис.
Создание, парсинг и форматирование дат выполняются просто и логично — без лишнего кода и сложных конструкций.
2. Удобная работа с часовыми поясами.
Pendulum позволяет легко управлять временными зонами, избавляя разработчика от типичных ошибок и путаницы с timezone.
3. Человекочитаемые интервалы.
Разницу между датами можно получить в понятном для человека формате, например: “2 дня назад” или “через 3 часа”.
4. Поддержка локализации.
Библиотека умеет форматировать даты на разных языках, что особенно полезно для международных проектов.
5. Иммутабельность объектов
Объекты Pendulum неизменяемы, что помогает избежать неожиданных изменений данных и повышает надежность кода.
@python_practics | #фреймворки_библиотеки
Если стандартный модуль datetime кажется громоздким и неудобным, библиотека Pendulum предлагает более элегантное и мощное решение. Она упрощает работу с датами, временем и часовыми поясами, делая код чище и понятнее.
Основные преимущества Pendulum:
1. Интуитивный синтаксис.
Создание, парсинг и форматирование дат выполняются просто и логично — без лишнего кода и сложных конструкций.
2. Удобная работа с часовыми поясами.
Pendulum позволяет легко управлять временными зонами, избавляя разработчика от типичных ошибок и путаницы с timezone.
3. Человекочитаемые интервалы.
Разницу между датами можно получить в понятном для человека формате, например: “2 дня назад” или “через 3 часа”.
4. Поддержка локализации.
Библиотека умеет форматировать даты на разных языках, что особенно полезно для международных проектов.
5. Иммутабельность объектов
Объекты Pendulum неизменяемы, что помогает избежать неожиданных изменений данных и повышает надежность кода.
@python_practics | #фреймворки_библиотеки
❤1
Польза модуля pickle
В чем польза модуля pickle для работы с данными в Python?
Посмотреть ответ.
@python_practics
В чем польза модуля pickle для работы с данными в Python?
Посмотреть ответ.
@python_practics
👍2
В чем польза модуля pickle для работы с данными в Python?
Anonymous Quiz
27%
Обеспечивает сжатие данных для экономии места на диске.
37%
Сохраняет полную структуру и состояние объектов Python между запусками программы.
10%
Предоставляет шифрование данных для безопасности.
27%
Конвертирует данные в человекочитаемый JSON-формат.
Уже завтра вечером в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Python с нуля: автоматизируйте то, на что сейчас уходят часы
Курс для тех, кто никогда не программировал, но уже работает с Excel и данными.
За короткий курс вы освоите базу Python с нуля и сразу начнёте применять её в рабочих задачах:
— объединять Excel-файлы
— обрабатывать большие таблицы
— строить сводные и графики
— работать с датами и текстом
— автоматизировать повторяющиеся действия
Без лишней теории — только база языка и практические задачи, которые помогают экономить время уже в процессе обучения. За несколько недель выучить язык с нуля
👉@tea4erman_bot
Курс для тех, кто никогда не программировал, но уже работает с Excel и данными.
За короткий курс вы освоите базу Python с нуля и сразу начнёте применять её в рабочих задачах:
— объединять Excel-файлы
— обрабатывать большие таблицы
— строить сводные и графики
— работать с датами и текстом
— автоматизировать повторяющиеся действия
Без лишней теории — только база языка и практические задачи, которые помогают экономить время уже в процессе обучения. За несколько недель выучить язык с нуля
👉@tea4erman_bot
❤2🔥1
🧩 Какие из этих вызовов найдут совпадение?
Только первые два. Функция 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
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 это выглядит так:
Имя password_change даёт встроенный django.contrib.auth.urls. Django проверяет его только при запросе, так что опечатка всплывёт, лишь когда кто-то откроет адрес.
В оригинале есть готовые тесты и второй служебный адрес с восхитительно длинным именем.
👍 - если было полезно
@python_practics
Менеджер паролей, заметив утёкший или повторяющийся пароль, может предложить его сменить. Но адрес этой страницы на каждом сайте свой.
Веб-спецификация резервирует для этого путь /.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 год). Это текстовый файл по адресу
В Django его отдаёт короткая view на FileResponse с явным
Подвох в поле Expires: после этой даты файлу верить не стоит, а RFC советует ставить её меньше чем через год. Адам Джонсон ловит это встроенной проверкой Django (system check): за 30 дней до срока runserver, migrate и test начинают предупреждать, но ничего не блокируют.
👍 - если было полезно
@python_practics
Без явного контакта исследователь будет угадывать адреса вроде 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 без файла зависимостей
Команда
Выручает переменная
Эту же дату Саймон Уиллисон добавляет в ключ кэша через
Учтите одно: когда кэш нашёлся, он включает
Весь рецепт умещается в один короткий workflow.
👍 - если было полезно
@python_practics
Команда
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
Когда .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-файл:
Подвох в том, что ошибка в файле ничем себя не выдаёт. Ссылки просто открываются в браузере, и нигде нет ни одного сообщения.
Готовые view, тесты к ним и команды, чтобы после деплоя проверить, что видят Apple и Google, собраны в оригинале.
👍 - если было полезно
@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