Программистика
Закрытый канал
Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager
Больше5 580
Подписчики
-524 часа
-437 дней
-10430 день
Архив постов
5 579
The Dark - приватный канал от специалиста по цифровой криминалистике.
• Годные OSINT инструменты;
• Нейросети;
• Приватные мануалы и софт;
• Malware Analysis
Кому сюда:
— Профессионалам, которые устали от детского сада в тематических каналах.
— Аналитикам, расследователям, revers-инженерам.
— Тем, кто знает, чем PE отличается от ELF, и не задаёт вопросов «а что такое отладчик».
Впервые открыт свободный вход
Welcome to The Dark
5 579
👩💻 Структурное сопоставление (match-case): не просто switch, а мощный инструмент
В Python 3.10 появилась фича, которую ждали годы — структурное сопоставление с образцом (pattern matching). Многие думают, что это просто аналог
switch-case из других языков, но на самом деле match-case гораздо мощнее: он умеет разбирать кортежи, списки, словари, классы и даже захватывать значения. Разбираемся на примерах.
🧱 Проблема: куча if-elif-else для проверки структуры
Без match-case проверка сложных данных превращается в лапшу:
def process_data(data):
if isinstance(data, tuple) and len(data) == 2 and isinstance(data[0], str):
action = data[0]
value = data[1]
if action == "print":
print(value)
elif action == "square":
print(value ** 2)
else:
print("Неизвестная команда")
elif isinstance(data, list) and data and data[0] == "quit":
return None
else:
raise TypeError("Неожиданный формат")
🧠 match-case: читаемо и мощно
То же самое с match-case:
def process_data(data):
match data:
case ("print", value):
print(value)
case ("square", value):
print(value ** 2)
case ["quit"] | ["exit"]:
return None
case _:
raise TypeError("Неожиданный формат")
Код стал короче, понятнее и безопаснее.
🔍 Что умеет match-case
1. Сопоставление с литералами
status = 404
match status:
case 200:
print("OK")
case 404 | 403:
print("Ошибка клиента")
case 500:
print("Ошибка сервера")
2. Захват значений
match point:
case (x, y):
print(f"Координаты: x={x}, y={y}")
case (x, y, z):
print(f"3D: {x}, {y}, {z}")
3. Распаковка списков и кортежей
match command.split():
case ["help"]:
print("Справка")
case ["run", script, *args]:
print(f"Запуск {script} с аргументами {args}")
4. Сопоставление с частями
match [1, 2, 3, 4, 5]:
case [first, second, *rest]:
print(first, second, rest) # 1 2 [3, 4, 5]
case _:
print("Недостаточно элементов")
5. Словари и именованные поля
match data:
case {"type": "user", "name": name, "age": age}:
print(f"Пользователь {name}, {age} лет")
case {"type": "product", "title": title}:
print(f"Товар: {title}")
6. Сопоставление с классами
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
match obj:
case Point(x=0, y=0):
print("Начало координат")
case Point(x=0, y=y):
print(f"На вертикальной оси y={y}")
case Point():
print("Обычная точка")
7. Условия (guard)
match value:
case int(x) if x > 0:
print(f"Положительное число {x}")
case int(x):
print(f"Неположительное число {x}")
⚠️ Ловушки и ограничения
1. Match не проваливается вниз как в C-шном switch. Отработал один case — выход.
2. Переменные, захваченные в case, видны только внутри этого case (и после него, если не переопределены).
3. Сопоставление с `_` (подчёркивание) — аналог default, но _ — это законная переменная, которая не используется.
4. Порядок важен — более конкретные case должны идти раньше общих.
💡 Запомни:
🟢 match-case — не просто замена if-elif, а полноценный инструмент для декомпозиции структур данных. 🟢 Умеет распаковывать последовательности, словари, объекты и накладывать условия. 🟢 Делает код обработки вложенных данных читаемым и безопасным. 🟢 Доступен с Python 3.10+. Если ваш проект ещё не обновился — есть повод.Программистика || #Статья
5 579
Совет на ближайшие годы — изучайте ВАЙБ-КОДИНГ
ИИ уже пишет код, чинит баги, генерирует тесты, документацию и помогает запускать продукты быстрее, чем это делали классические команды разработки. И это уже не "будущее когда-нибудь", а реальность, которая меняет рынок уже сегодня
И те, кто научится вайбкодить сейчас, будут увереннее конкурировать на рынке и зарабатывать больше тех, кто по-прежнему делает всё вручную.
Стартовать с нуля поможет канал Вайб-кодинг. Там ребята круглосуточно мониторят более 320 российских и зарубежных источников и публикуют только главное: релизы, инструменты, гайды, курсы и практические кейсы.
Подписывайтесь, нас уже 30 тысяч: @vibecoding_tg
5 579
🖥 Guillotina — это современная RESTful-платформа на основе Python, разработанная для эффективного управления большими объемами данных! Она построена с использованием asyncio, что обеспечивает высокую производительность и масштабируемость при работе с асинхронными операциями.🐱 Ссылка на GitHub Программистика|| #Репозиторий
5 579
🖥 Trogon— это библиотека, которая автоматически создаёт интерактивный TUI-интерфейс (текстовый пользовательский интерфейс) для любого CLI-приложения, написанного с использованием Click, Argparse, Tyro или других парсеров. Просто добавьте одну строку кода — и ваш скучный --help превращается в удобный меню-выбор с автодополнением и навигацией стрелочками. Работает на движке Textual. Идеально для скриптов, которыми пользуются не разработчики, а обычные люди.Установка:
pip install trogon
Пример: Если у вас есть Click-приложение cli, добавьте trogon и запустите trogon myapp.
🐱 Ссылка на GitHub
Программистика|| #Репозиторий5 579
Айтишники ловите сборник бесплатных курсов, полезных инструментов и книг
Проект «TERMINAL» стал крупнейшей библиотекой бесплатного образования. В одном канале собраны курсы, книги, полезные инструменты и практические тренажёры для всех разработчиков
🎓 Практические курсы и задания
🪽 Книги и статьи известных авторов
😮💨 Полезные инструменты и ресурсы
🌟 IT-новости и инсайды
Обучение по всем направлениям: SQL, Python, Frontend, PHP, C++, Golang, GIT, Linux, QA, Java, кибербезопасность и др.
Ценишь знания, подпишись: Terminal_tg
5 579
🧠 Отгадка: что выведет этот код про декоратор?
def deco(func):
def wrapper(*args, **kwargs):
print("start")
return func(*args, **kwargs)
return wrapper
@deco
def add(a, b):
return a + b
result1 = add(2, 3)
result2 = add(2, 3, 4)
print(result1, result2)
✔️ Правильный ответ: 2. start затем 5, затем TypeError
📖 Почему так происходит?
1. Декоратор @deco заменяет функцию add на wrapper, которая печатает "start" и затем вызывает исходную add.
2. При первом вызове add(2, 3) — всё ок. Печатается start, возвращается 5.
3. При втором вызове add(2, 3, 4) — обёртка пропускает три аргумента, но исходная функция add ожидает ровно два (a, b). Python выбрасывает TypeError: add() takes 2 positional arguments but 3 were given.
4. Исключение возникает до того, как код вернётся в print(), поэтому result2 никогда не присваивается, и print(result1, result2) даже не выполняется. Вместо этого программа падает с ошибкой.
Что в консоли:
start start TypeError: add() takes 2 positional arguments but 3 were givenОбратите внимание:
start печатается для второго вызова перед ошибкой, потому что декоратор выполняется до вызова исходной функции.
Программистика || #quiz5 579
🎖 С Днём Победы, уважаемые коллеги!
9 мая — день, который мы не имеем права забывать. Спасибо ветеранам за мир, свободу и возможность жить, работать и создавать. Низкий поклон. Вечная память.Программистика
5 579
📖PyCharm: профессиональная работа на Python
Раскройте возможности PyCharm для создания деловых, научных и веб-приложений на Python!PyCharm – лучшая профессиональная среда разработки для программистов Python среди множества доступных интегрированных сред. Независимо от того, в каких целях используется Python – для общих задач автоматизации, создания утилит, веб-приложений, анализа данных, машинного обучения или бизнес-приложений, – инструменты PyCharm упрощают выполнение сложных задач и оптимизируют общую производительностьПрограммистика ||#book
5 579
🧠 Загадка на ночь (для профи): что выведет этот код?
def deco(func):
def wrapper(*args, **kwargs):
print("start")
return func(*args, **kwargs)
return wrapper
@deco
def add(a, b):
return a + b
result1 = add(2, 3)
result2 = add(2, 3, 4)
print(result1, result2)
Варианты:
1. 5 и TypeError
2. start затем 5, затем TypeError
3. 5 и 9
4. start затем 5, затем start затем 9
Пиши свой вариант в комментарии! Ответ и разбор — через пару часов 🔥
Программистика || #quiz5 579
👩💻 Click — это библиотека для создания интерфейсов командной строки (CLI). В отличие от
argparse, Click использует декораторы, делая код коротким и понятным. Поддерживает вложенные команды, цвета, подсказки, пароли и автогенерацию --help. На Click построены инструменты вроде Flask, Black и Pytest.
🐱 Ссылка на GitHub
Программистика || #Репозиторий5 579
🔥 Мастхев подборка для каждого айтишника
Держите подборку авторских IT-каналов по всем направлениям: курсы, книги, статьи, практики, примеры кода, шпаргалки и прохождение собесов.
▪️ Python ▪️ Java
▪️ Frontend ▪️ C / C++
▪️ ИБ & Хакинг ▪️ DevOps
▪️ Data Science ▪️ Linux
▪️ C# & GameDev ▪️ Курсы IT
▪️ ИИ-бот для IT ▪️ Весь IT
👉🏻 Подписывайся и прокачивай свои навыки
5 579
🏷 Секрет
getattr: читай атрибуты без try/except
Устали писать try/except AttributeError чтобы проверить, есть ли у объекта нужное поле?
❌ Было:
try:
value = obj.some_attr
except AttributeError:
value = "default"
✅ Стало:
value = getattr(obj, 'some_attr', 'default')
getattr(object, name, default) пытается получить атрибут. Если его нет — возвращает default (по умолчанию None). Никаких исключений.
Где пригодится:
🟢 Работа с динамическими объектами (API, JSON, конфиги)
🟢 Безопасное чтение вложенных атрибутов
🟢 Функции с опциональными аргументами-аттрибутами
Запомни: getattr — твой друг для безопасного доступа.
Программистика|| #tips5 579
💻 Вопрос с собеса: Чем отличается list от tuple?
Это один из тех вопросов, который задают почти всем - и все равно на нем спотыкаются. Просто сказать «list изменяемый, а tuple нет» - мало. Надо понимать последствия.
👉 Базовый ответ (которого ждут):
-
list - изменяемый (mutable). Можно менять, добавлять, удалять элементы.
- tuple - неизменяемый (immutable). После создания его нельзя изменить.
👉 Глубокий разбор:
1. Производительность и память:
Из-за неизменяемости tuple работает быстрее и занимает меньше памяти. Python может кэшировать и оптимизировать их.
import sys
import timeit
lst = [1, 2, 3]
tup = (1, 2, 3)
print(sys.getsizeof(lst)) # 120 байт (может меняться)
print(sys.getsizeof(tup)) # 72 байта
2. Безопасность и хэшируемость:
tuple можно использовать как ключ в словаре, list - нет. Это важно для кэшей, индексов.
valid_cache = {(1, 2): "result"} # Работает
invalid_cache = {[1, 2]: "result"} # TypeError: unhashable type
3. Семантическое различие:
- list - это однородная коллекция (все элементы обычно одного типа).
- tuple - это гетерогенная коллекция, часто используется как запись с полями (как namedtuple или дата-класс).
# Плохо: tuple как list
for item in ("apple", "banana", "cherry"):
print(item)
# Хорошо: tuple как структура
person = ("Alice", 30, "engineer") # имя, возраст, профессия
4. Неизменяемость - только на верхнем уровне:
Важный подвох! Если внутри tuple лежит изменяемый объект - его можно изменить.
danger = (1, 2, [3, 4])
danger[2].append(5) # Опасно! Работает!
print(danger) # (1, 2, [3, 4, 5])
💡 Итоговый ответ для собеса:
1. Основное: list - mutable, tuple - immutable 2. Следствия: tuple быстрее, занимает меньше памяти, хэшируем 3. Семантика: list для однородных данных, tuple для структур 4. Ловушка: неизменяемость только на верхнем уровне 5. Когда что использовать: - tuple для константных данных, ключей словаря - list для динамических коллекцийЗапомни: на джуньорских позициях хватит первого пункта, но сеньоры ждут все пять. Программистика||#jobs
5 579
В России можно посещать IT-мероприятия хоть каждый день: как оффлайн, так и онлайн
Но где их находить? Как узнавать о них раньше, чем когда все начнут выкладывать фотографии оттуда?
Переходите на канал IT-Мероприятия России. В нём каждый день анонсируются мероприятия со всех городов России
📆 в канале размещаются как онлайн, так и оффлайн мероприятия;
👩💻 можно найти ивенты по любому стеку: программирование, frontend-backend разработка, кибербезопасность, дата-аналитика, osint, devops и другие;
🎙 разнообразные форматы мероприятий: митапы с коллегами по цеху, конференции и вебинары с известными опытными специалистами, форумы и олимпиады от важных представителей индустрии и многое другое
А чтобы не искать по разным форумам и чатам новости о предстоящих ивентах:
🚀 IT-мероприятия России — подписывайся и будь в курсе всех предстоящих мероприятий!
5 579
🪄 pyinstrument — это профилировщик Python, который показывает, где ваш код тратит время, простым и наглядным способом. В отличие от cProfile (который выдаёт простыню цифр), pyinstrument рисует красивый древовидный отчёт: сразу видно, какие функции вызывают тормоза и сколько времени ушло на свои и дочерние вызовы. Работает на уровне интерпретатора, не требует изменения кода. Идеально для поиска узких мест в веб-приложениях, скриптах и ETL-пайплайнах.Установка:
pip install pyinstrument
Запуск:
pyinstrument script.py
🐱 Ссылка на GitHub
Программистика || #Репозиторий
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
