Forwarded from Типичный программист
Лимитка для комьюнити выходит в прод! Успей залететь в розыгрыш
Уже скоро День программиста, и к этому моменту наш безалкогольный IPA будет разлит!
Вы выбрали название и концепт упаковки, а наши коллеги по коллабу из Paradox уже отдали этикетки в печать.
И пока мы с вами ожидаем релиза, запускаем специальный розыгрыш.
Победитель получит коробку «ТОКСИЧНЫЙ ПРОГРАММИСТ» с шестью банками. Подробнее с правилами вы можете ознакомиться здесь.
Для участия достаточно:
— быть подписанным на @tproger и @paradox_beer;
— оставить реакцию и любой комментарий под этим постом;
— нажать кнопку «Участвую».
Итоги подведём 15 сентября. Победителя выберем с помощью бота. Всем удачи!
Участников: 154
Призовых мест: 1
Дата розыгрыша: 18:00, 15.09.2025 MSK (3 дня)
Уже скоро День программиста, и к этому моменту наш безалкогольный IPA будет разлит!
Вы выбрали название и концепт упаковки, а наши коллеги по коллабу из Paradox уже отдали этикетки в печать.
И пока мы с вами ожидаем релиза, запускаем специальный розыгрыш.
Победитель получит коробку «ТОКСИЧНЫЙ ПРОГРАММИСТ» с шестью банками. Подробнее с правилами вы можете ознакомиться здесь.
Для участия достаточно:
— быть подписанным на @tproger и @paradox_beer;
— оставить реакцию и любой комментарий под этим постом;
— нажать кнопку «Участвую».
Итоги подведём 15 сентября. Победителя выберем с помощью бота. Всем удачи!
Участников: 154
Призовых мест: 1
Дата розыгрыша: 18:00, 15.09.2025 MSK (3 дня)
❤1❤🔥1
Что такое линтер и что он делает
Линтер - это инструмент статического анализа кода, который проверяет ваш код на темы:
🔘 Синтаксис - правильно ли расставлены скобки, двоеточия;
🔘 Импорты - все ли импорты используются;
🔘 Переменные - все ли переменные определены;
🔘 Стиль - соответствие PEP 8;
🔘 Типы - если используется типизация.
Зачем запускать после изменений
⚡️ Обнаружение новых ошибок
⚡️ Проверка совместимости
⚡️ Соблюдение стандартов
⚡️ Проблемы безопасности
⚡️ Неэффективный код
Настройка линтера
Обычно линтер настраивается через файлы конфигурации:
Мы можем тонко настраивать, каким именно правилам следовать:
Классические линтеры
🔘 Pylint
🔘 ruff
🔘 Flake8
🔘 mypy
🔘 black
Пользователи Cursor, возможно, обратили внимание на завтозапуск линтера после практически каждого внесенного изменения. Эта IDE не отдает предпочтения какому-то конкретному инструменту, но запускает несколько из них.
Список правил ruff с детализацией в доках
#основы
@zen_of_python
Линтер - это инструмент статического анализа кода, который проверяет ваш код на темы:
Зачем запускать после изменений
# После добавления нового кода
def new_feature():
unused_var = "not used" # Линтер найдет неиспользуемую переменную
return "feature"
# После изменения импортов
from new_module import new_function
# Линтер проверит, существует ли new_function
# После рефакторинга
class MyClass:
def __init__(self):
self.very_long_attribute_name_that_should_be_shorter = None
# Линтер предложит сократить имя
import subprocess
user_input = input("Enter command: ")
subprocess.run(user_input, shell=True) # Линтер предупредит о SQL injection
# Неэффективно
my_list = []
for i in range(1000):
my_list.append(i)
# Линтер может предложить list comprehension
my_list = [i for i in range(1000)]
Настройка линтера
Обычно линтер настраивается через файлы конфигурации:
# pyproject.toml
[tool.ruff]
line-length = 88 # Максимальная длина строки
target-version = "py38" # Версия Python
Мы можем тонко настраивать, каким именно правилам следовать:
[tool.ruff.lint]
select = ["E", "F", "W", "C90", "I", "N", "UP", "YTT", "S", "BLE", "FBT", "B", "A", "COM", "C4", "DTZ", "T10", "EM", "EXE", "FA", "ISC", "ICN", "G", "INP", "PIE", "T20", "PYI", "PT", "Q", "RSE", "RET", "SLF", "SLOT", "SIM", "TID", "TCH", "INT", "ARG", "PTH", "TD", "FIX", "ERA", "PD", "PGH", "PL", "TRY", "FLY", "NPY", "AIR", "PERF", "FURB", "LOG", "RUF"]
ignore = ["E501", "S101", "PLR0913", "PLR0912", "PLR0915"]
Классические линтеры
Пользователи Cursor, возможно, обратили внимание на завтозапуск линтера после практически каждого внесенного изменения. Эта IDE не отдает предпочтения какому-то конкретному инструменту, но запускает несколько из них.
Список правил ruff с детализацией в доках
#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
✍1❤1
В гайдах для начинающих на такие вопросы вряд ли найдется ответ. А вот в телеграм-канале OTP Tech точно найдется наглядный разбор.
В OTP Tech вы получите реальный опыт внедрения сложных решений в продакшен крупного финтеха. Ну и просто фановый интерактив, который поможет разгрузить голову.
Если вы разрабатываете, проектируете или администрируете и хотите смотреть дальше хеллоу ворлдов — вам будет здесь интересно.
Присоединяйтесь: @otp_tech
Please open Telegram to view this post
VIEW IN TELEGRAM
Алгоритмы и структуры данных на Python
Уже ставшая классикой, книга поможет вам освоить алгоритмическое мышление. Помимо основ, вы познакомитесь с алгоритмами сортировки, поиска, деревьями, графами, динамическим программированием и жадными методами — всё написано с акцентом на Python-реализацию. Сильная сторона книги — реальные проекты: от простого калькулятора до системы обнаружения плагиата. Независимо от вашего уровня, вы найдёте в ней полезные идеи для укрепления навыков и расширения понимания алгоритмов.
#обучение
@zen_of_python
Уже ставшая классикой, книга поможет вам освоить алгоритмическое мышление. Помимо основ, вы познакомитесь с алгоритмами сортировки, поиска, деревьями, графами, динамическим программированием и жадными методами — всё написано с акцентом на Python-реализацию. Сильная сторона книги — реальные проекты: от простого калькулятора до системы обнаружения плагиата. Независимо от вашего уровня, вы найдёте в ней полезные идеи для укрепления навыков и расширения понимания алгоритмов.
#обучение
@zen_of_python
❤1
python-dateutil | datetime, который смог
Ультрапопулярное (если верить рейтингу PyPi) расширение стандартного модуля
— Вычисление «следующего X»: удобно находим даты следующего понедельника или последней недели месяца;
— Относительные дельты: вычисляем разницу между двумя датами не только в секундах, но и в понятных календарных единицах (например, «2 месяца и 5 дней»);
— Рекуррентные даты (повторяющиеся события)
Поддерживается генерация серий дат по очень гибким правилам, расширяющим стандарт iCalendar (например: «каждый второй вторник месяца до конца года») и многое другое.
Еще бы русский язык поддерживала, цены бы не было!
#инструмент
@zen_of_python
Ультрапопулярное (если верить рейтингу PyPi) расширение стандартного модуля
datetime
, поддерживает:— Вычисление «следующего X»: удобно находим даты следующего понедельника или последней недели месяца;
— Относительные дельты: вычисляем разницу между двумя датами не только в секундах, но и в понятных календарных единицах (например, «2 месяца и 5 дней»);
— Рекуррентные даты (повторяющиеся события)
Поддерживается генерация серий дат по очень гибким правилам, расширяющим стандарт iCalendar (например: «каждый второй вторник месяца до конца года») и многое другое.
Еще бы русский язык поддерживала, цены бы не было!
#инструмент
@zen_of_python
YTSage | Скачиватель с YouTube
Инструмент с несложным GUI на PySide6 c yt-dlp под капотом. Позволяет выбрать HD-качество, извлечь субтитры. Поддерживает скачивание плейлистов с возможностью выбрать конкретные видео перед загрузкой.
#инструмент
@zen_of_python
Инструмент с несложным GUI на PySide6 c yt-dlp под капотом. Позволяет выбрать HD-качество, извлечь субтитры. Поддерживает скачивание плейлистов с возможностью выбрать конкретные видео перед загрузкой.
#инструмент
@zen_of_python