Программистика
关闭频道
Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager
显示更多5 799
订阅者
+3224 小时
+187 天
-4030 天
帖子存档
5 795
🧠 Отгадка: что выведет этот код?
funcs = []
for i in range(3):
funcs.append(lambda: i)
print([f() for f in funcs])
✅ Правильный ответ: 2. `[2, 2, 2]`
📖 Почему так происходит?
Это классическая ловушка с поздним связыванием (late binding) в Python. Внутри цикла создаются три лямбда-функции, которые не запоминают текущее значение i, а захватывают ссылку на переменную `i` из внешней области видимости (замыкание). К моменту вызова этих функций (после завершения цикла) переменная i уже равна 2. Поэтому все три функции возвращают 2.
# Что здесь происходит:
# 1. Цикл for i in range(3) меняет i от 0 до 2.
# 2. На каждой итерации создаётся лямбда lambda: i, которая "видит" текущее i, но не копирует его значение.
# 3. После выхода из цикла i = 2.
# 4. Когда мы вызываем f() для каждой функции, все они обращаются к этой одной переменной i и получают 2.
Как исправить? Нужно зафиксировать текущее значение i с помощью аргумента по умолчанию:
funcs = [lambda i=i: i for i in range(3)]
print([f() for f in funcs]) # [0, 1, 2]
В этом варианте i=i создаёт локальную переменную внутри лямбды со значением, которое было на момент создания.
Ставьте 🔥, если было полезно!
Программистика || #quiz5 795
«Освоение модульного тестирования с использованием Pytest» курс на Stepik
Сегодня умение писать тесты ценится почти так же, как и умение писать сам код. Если pytest, fixtures, CI/CD и coverage всё ещё вызывают вопросы самое время это исправить
Программа курса:
• Pytest: от базовых тестов до CI/CD
• fixtures, mocking, parametrization
• Flask/API testing
• Selenium и UI тестирование
• Docker + Docker Compose
• GitHub Actions
• coverage и отчёты
• debugging и refactoring тестов
Курс построен вокруг практики: много примеров, готовых кейсов и разборов рабочих сценариев
48 часов действует скидка 25%
↗️ Пройти курс на Stepik
5 795
🧠 Загадка на ночь: что выведет этот код?
funcs = []
for i in range(3):
funcs.append(lambda: i)
print([f() for f in funcs])
Варианты:
1. [0, 1, 2]
2. [2, 2, 2]
3. [0, 0, 0]
4. Ошибка
Пиши свой вариант в комментарии! Ответ и разбор — через пару часов 🔥
Программистика || #quiz5 795
Силу гика в вас чувствуем мы
И потому сообщить должны: у хостинг‑провайдера FirstVDS сейчас проходит акция ко Дню гика!
Что ждёт вас:
• скидки на заказ новых VDS до 30%
• спецтариф FirstGeek с фиксированной ценой,
• онлайн‑турнир прямо на сайте,
• награды за игровую валюту: сертификаты, мерч и скидки на VDS
• а в финале розыгрыш, PS5 Pro 2 Тб, Steam Deck OLED 512 Гб и других приятных трофеев.
Так что путь здесь ясен:
🪐 если сервер нужен — выгоду получите,
👾 если азарт близок — в игру войдёте,
🎮 если удача на вашей стороне, ещё и с приставкой уйти сможете.
В битву гиков!
Мимо такой акции пройти трудно. Особенно если гик внутри вас давно требует приключений.
#реклама
О рекламодателе
5 795
💻 Вопрос из собеседования: Как работает `yield` и чем генераторы отличаются от списков?
Генераторы — это функции, которые используют
yield вместо return. Они возвращают итератор, который выдает значения по одному, не храня весь результат в памяти. Это ключевое отличие от списков.
# Список — хранит все элементы в памяти
def get_squares_list(n):
result = []
for i in range(n):
result.append(i ** 2)
return result
# Генератор — вычисляет значения на лету
def get_squares_gen(n):
for i in range(n):
yield i ** 2
lst = get_squares_list(1_000_000) # занимает много памяти
gen = get_squares_gen(1_000_000) # почти не занимает
print(next(gen)) # 0
print(next(gen)) # 1
Генераторы нельзя индексировать (gen[5] вызовет ошибку), они одноразовые (истощаются после итерации). Их главное преимущество — экономия памяти при работе с большими или бесконечными последовательностями.
Программистика || #jobs5 795
Запустили новый канал про ИИ! 🚀
Наши ИИ агенты 24/7 мониторят соцсети и мировые СМИ, а команда отбирает лучшее — новости об ИИ, апдейты моделей, инсайды и мемы.
Подпишись и присылай свои темы и идеи форматов.
Подписывайтесь на @A1ntelligence!
5 795
👩💻
print(): два параметра, которые вы могли пропустить
Все знают print("Hello"), но мало кто использует sep и end — а они очень полезны.
- sep — разделитель между значениями (по умолчанию пробел)
print("a", "b", "c", sep=", ") # a, b, c
- end — символ после последнего значения (по умолчанию \n)
print("Загрузка", end="...")
print("готова") # Загрузка...готова
🟢 Бонус: print("Ошибка", file=sys.stderr) — вывод в поток ошибок.
Знайте возможности простых функций — это экономит время.
Программистика || #doc5 795
Совет на 2026 год – начните изучать ВАЙБ-КОДИНГ
Сейчас с нейронками можно самому создавать проекты любой сложности - от идеи до релиза.
➖Без опыта и образования в IT
➖Без команды программистов
Проще всего об этом рассказывает Кирилл, вайбкодер, который рубит 500к+ с собственных проектов.
По его гайдам не придется мучиться и тратить впустую часы, пытаясь научить ИИ работать, как надо.
Можешь начать с бесплатного урока, где он разобрал: что такое вайбкодинг, какие связки реально работают, как с нуля собрать проект и получить первых пользователей.
Забирай материал в закрепе: https://t.me/+2EYebVbH_iVjYjBi
5 795
Топ 7 сайтов для изучения питона
1. Python.org
Официальный сайт языка: туториал, документация, ссылки на книги и курсы. Отличная отправная точка, особенно чтобы понять «как устроен» Python.2. Real Python
Сайт с подробными статьями, видео и туториалами — от базы до работы с веб‑фреймворками, тестами и инструментами разработки.3. LearnPython.org
Интерактивный ресурс с уроками и задачами прямо в браузере. Хорош для новичков, которые хотят писать код сразу после объяснений.4. Codecademy
Крупная платформа с интерактивными курсами по Python: есть как базовые темы, так и направления вроде веб‑ и data‑разработки.5. W3Schools Python
Простые уроки и примеры кода, удобно как «быстрый справочник» и для отработки базовых конструкций.6. HackerRank / Codewars
Платформы с задачами и челленджами по Python; помогают отточить навыки через практику и подготовиться к собеседованиям.7. Python‑курсы Mooc.fi
Почти легендарный бесплатный курс по Python с большим количеством автоматически проверяемых заданий и понятным прогрессом.Программистика || #Ресурсы
5 795
Python в примерах и задачах
В курсе реализуется проблемно-ориентированное обучение, когда минимальные теоретические аспекты программирования на Python предлагаются слушателю, только если этого потребует решаемая задача. Кроме того, в научно-популярной форме объясняется физическая, математическая или экономическая суть каждой задачи.
🌐 СсылкаПрограммистика || #Course
5 795
💻 Вопрос из собеседования: Как использовать `functools.lru_cache` для ускорения рекурсивных вычислений?
Рекурсивные функции (например, для чисел Фибоначчи) без кэширования работают экспоненциально долго. На собеседовании проверяют знание встроенного декоратора
lru_cache из модуля functools, который автоматически запоминает результаты вызовов функции.
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
print(fib(100)) # Мгновенно, без кэша считалось бы вечность
lru_cache хранит результаты вызовов в словаре. Аргументы должны быть хешируемыми. maxsize=None — без ограничения. Для отладки есть fib.cache_info(). Идеально для динамического программирования и чистых функций.
Надеюсь, это поможет вам пройти собеседование на желаемую вами работу, удачи🔥🔥🔥
Программистика || #jobs5 795
The Dark - приватный канал от специалиста по цифровой криминалистике.
• Годные OSINT инструменты;
• Нейросети;
• Приватные мануалы и софт;
• Malware Analysis
Кому сюда:
— Профессионалам, которые устали от детского сада в тематических каналах.
— Аналитикам, расследователям, revers-инженерам.
— Тем, кто знает, чем PE отличается от ELF, и не задаёт вопросов «а что такое отладчик».
Впервые открыт свободный вход
Welcome to The Dark
5 795
👩💻 Структурное сопоставление (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 795
Совет на ближайшие годы — изучайте ВАЙБ-КОДИНГ
ИИ уже пишет код, чинит баги, генерирует тесты, документацию и помогает запускать продукты быстрее, чем это делали классические команды разработки. И это уже не "будущее когда-нибудь", а реальность, которая меняет рынок уже сегодня
И те, кто научится вайбкодить сейчас, будут увереннее конкурировать на рынке и зарабатывать больше тех, кто по-прежнему делает всё вручную.
Стартовать с нуля поможет канал Вайб-кодинг. Там ребята круглосуточно мониторят более 320 российских и зарубежных источников и публикуют только главное: релизы, инструменты, гайды, курсы и практические кейсы.
Подписывайтесь, нас уже 30 тысяч: @vibecoding_tg
5 795
🖥 Guillotina — это современная RESTful-платформа на основе Python, разработанная для эффективного управления большими объемами данных! Она построена с использованием asyncio, что обеспечивает высокую производительность и масштабируемость при работе с асинхронными операциями.🐱 Ссылка на GitHub Программистика|| #Репозиторий
5 795
🖥 Trogon— это библиотека, которая автоматически создаёт интерактивный TUI-интерфейс (текстовый пользовательский интерфейс) для любого CLI-приложения, написанного с использованием Click, Argparse, Tyro или других парсеров. Просто добавьте одну строку кода — и ваш скучный --help превращается в удобный меню-выбор с автодополнением и навигацией стрелочками. Работает на движке Textual. Идеально для скриптов, которыми пользуются не разработчики, а обычные люди.Установка:
pip install trogon
Пример: Если у вас есть Click-приложение cli, добавьте trogon и запустите trogon myapp.
🐱 Ссылка на GitHub
Программистика|| #Репозиторий5 795
Айтишники ловите сборник бесплатных курсов, полезных инструментов и книг
Проект «TERMINAL» стал крупнейшей библиотекой бесплатного образования. В одном канале собраны курсы, книги, полезные инструменты и практические тренажёры для всех разработчиков
🎓 Практические курсы и задания
🪽 Книги и статьи известных авторов
😮💨 Полезные инструменты и ресурсы
🌟 IT-новости и инсайды
Обучение по всем направлениям: SQL, Python, Frontend, PHP, C++, Golang, GIT, Linux, QA, Java, кибербезопасность и др.
Ценишь знания, подпишись: Terminal_tg
