ch
Feedback
Программистика

Программистика

关闭频道

Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager

显示更多
5 580
订阅者
-524 小时
-437
-10430
帖子存档
Айтишник, который не умеет использовать командную строку bash – так себе специалист. Если посетить несколько собеседований уровня от миддл, то можно убедиться, что вопросы про опыт работы в консоли появляются довольно часто. Сходу научиться всем командам bash нереально – их очень много. К счастью, появился канал BashMaster, в котором каждый день можно узнавать по одной небольшой связке команд и сразу же внедрять их в свою работу. Подпишись, освоишь bash на изи 👍

⌨️ Регистрация нажатий клавиш в Python — библиотека keyboard Библиотека keyboard — мощный инструмент для работы с клавиатурны
⌨️ Регистрация нажатий клавиш в Python — библиотека keyboard Библиотека keyboard — мощный инструмент для работы с клавиатурным вводом. Позволяет регистрировать нажатия/отпускания клавиш, создавать хоткеи и выполнять действия по комбинациям. Установка: pip install keyboard Пример кода:
import keyboard

# Регистрация горячей клавиши
keyboard.add_hotkey('ctrl+shift+a', lambda: print('Нажали комбинацию!'))

# Запись всех нажатий до esc
keyboard.record(until='esc')

# Блокировка ввода на 5 секунд
keyboard.block_key('a')  # Блокируем конкретную клавишу
⚠️ Важно: на Linux для работы с keyboard требуются права администратора (из-за доступа к устройствам ввода). Программистика

😒 Подборка каналов по информационной безопасности Проверенные каналы по безопасности, которые реально помогают расти. 👍 Zer
😒 Подборка каналов по информационной безопасности Проверенные каналы по безопасности, которые реально помогают расти. 👍 ZeroDay — Уроки, эксплуатация уязвимостей с нуля 👍 Белый Хакер — Свежие новости из мира ИБ 😎 Бункер Хакера — Статьи, книги, шпаргалки и хакинг 👨‍💻 Серверная Админа — Настройка и уроки по компьютерным сетям 📂 Подписывайся

📦 Контекстные менеджеры: от `open` до своих классов (и почему `with` — это не магия) Вы каждый день пишете with open('file.txt') as f, но задумывались ли вы, как это работает? Контекстные менеджеры — это не встроенная магия, а обычный протокол с двумя методами: __enter__ и __exit__. Их можно написать для любого ресурса: файлы, соединения с БД, блокировки, временные изменения настроек. Разбираемся, как это устроено и когда писать свой менеджер. 🧱 Что делает `with` под капотом Когда вы пишете:
with open('file.txt', 'r') as f:
    data = f.read()
Python делает следующее: 1. Вызывает open('file.txt', 'r') — получает объект, у которого есть методы __enter__ и __exit__. 2. Вызывает __enter__() — его результат присваивается переменной f. 3. Выполняет тело блока (data = f.read()). 4. Даже если в блоке произошла ошибка, вызывает __exit__() для гарантированного закрытия ресурса. Самый простой контекстный менеджер:
class ManagedFile:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode

    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()
        # Если вернуть True, исключение будет подавлено

with ManagedFile('hello.txt', 'w') as f:
    f.write('Hello, world!')
🧪 `__exit__` и обработка исключений Метод __exit__ получает три аргумента с информацией об исключении (если оно было). Если метод возвращает True, исключение не пробрасывается дальше — его как бы «проглотили». Это полезно для подавления ожидаемых ошибок.
class SuppressError:
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        if exc_type is ValueError:
            print(f"Подавили ошибку: {exc_val}")
            return True  # исключение не выйдет наружу

with SuppressError():
    raise ValueError("Ой, что-то пошло не так")
print("Программа продолжается")
Программистика || #Статья

🕷 Crawl4AI — это открытый веб-краулер и парсер, который преобразует любые сайты в чистый Markdown и готовые для LLM данные.
🕷 Crawl4AI — это открытый веб-краулер и парсер, который преобразует любые сайты в чистый Markdown и готовые для LLM данные. Он отлично подходит для создания корпоративных баз знаний, RAG-систем и AI-пайплайнов, автоматически обрабатывая динамический контент через Playwright и интегрируясь с основными моделями.
🐱 Ссылка на GitHub Программистика || #Репозиторий

🧠 Отгадка: что выведет этот код?
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 создаёт локальную переменную внутри лямбды со значением, которое было на момент создания. Ставьте 🔥, если было полезно! Программистика || #quiz

«Освоение модульного тестирования с использованием Pytest» курс на Stepik Сегодня умение писать тесты ценится почти так же, к
«Освоение модульного тестирования с использованием 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

🧠 Загадка на ночь: что выведет этот код?
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. Ошибка Пиши свой вариант в комментарии! Ответ и разбор — через пару часов 🔥 Программистика || #quiz

Силу гика в вас чувствуем мы И потому сообщить должны: у хостинг‑провайдера FirstVDS сейчас проходит акция ко Дню гика! Что ж
Силу гика в вас чувствуем мы И потому сообщить должны: у хостинг‑провайдера FirstVDS сейчас проходит акция ко Дню гика! Что ждёт вас: • скидки на заказ новых VDS до 30% • спецтариф FirstGeek с фиксированной ценой, • онлайн‑турнир прямо на сайте, • награды за игровую валюту: сертификаты, мерч и скидки на VDS • а в финале розыгрыш, PS5 Pro 2 Тб, Steam Deck OLED 512 Гб и других приятных трофеев. Так что путь здесь ясен: 🪐 если сервер нужен — выгоду получите, 👾 если азарт близок — в игру войдёте, 🎮 если удача на вашей стороне, ещё и с приставкой уйти сможете. В битву гиков! Мимо такой акции пройти трудно. Особенно если гик внутри вас давно требует приключений. #реклама О рекламодателе

💻 Вопрос из собеседования: Как работает `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] вызовет ошибку), они одноразовые (истощаются после итерации). Их главное преимущество — экономия памяти при работе с большими или бесконечными последовательностями. Программистика || #jobs

Запустили новый канал про ИИ! 🚀 Наши ИИ агенты 24/7 мониторят соцсети и мировые СМИ, а команда отбирает лучшее — новости об
Запустили новый канал про ИИ! 🚀 Наши ИИ агенты 24/7 мониторят соцсети и мировые СМИ, а команда отбирает лучшее — новости об ИИ, апдейты моделей, инсайды и мемы. Подпишись и присылай свои темы и идеи форматов. Подписывайтесь на @A1ntelligence!

👩‍💻 print(): два параметра, которые вы могли пропустить Все знают print("Hello"), но мало кто использует sep и end — а они очень полезны. - sep — разделитель между значениями (по умолчанию пробел)
  print("a", "b", "c", sep=", ")  # a, b, c
- end — символ после последнего значения (по умолчанию \n)
  print("Загрузка", end="...")
  print("готова")  # Загрузка...готова
🟢 Бонус: print("Ошибка", file=sys.stderr) — вывод в поток ошибок. Знайте возможности простых функций — это экономит время. Программистика || #doc

Совет на 2026 год – начните изучать ВАЙБ-КОДИНГ Сейчас с нейронками можно самому создавать проекты любой сложности - от идеи
Совет на 2026 год – начните изучать ВАЙБ-КОДИНГ Сейчас с нейронками можно самому создавать проекты любой сложности - от идеи до релиза. ➖Без опыта и образования в IT ➖Без команды программистов Проще всего об этом рассказывает Кирилл, вайбкодер, который рубит 500к+ с собственных проектов. По его гайдам не придется мучиться и тратить впустую часы, пытаясь научить ИИ работать, как надо. Можешь начать с бесплатного урока, где он разобрал: что такое вайбкодинг, какие связки реально работают, как с нуля собрать проект и получить первых пользователей. Забирай материал в закрепе: https://t.me/+2EYebVbH_iVjYjBi

👩‍💻 Python, ты изменился
📱 Первоисточник
Программистика|| #video

Топ 7 сайтов для изучения питона 1. Python.org Официальный сайт языка: туториал, документация, ссылки на книги и курсы. Отлич
Топ 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 с большим количеством автоматически проверяемых заданий и понятным прогрессом.
Программистика || #Ресурсы

Python в примерах и задачах В курсе реализуется проблемно-ориентированное обучение, когда минимальные теоретические аспекты п
Python в примерах и задачах
В курсе реализуется проблемно-ориентированное обучение, когда минимальные теоретические аспекты программирования на Python предлагаются слушателю, только если этого потребует решаемая задача. Кроме того, в научно-популярной форме объясняется физическая, математическая или экономическая суть каждой задачи.
🌐 Ссылка
Программистика || #Course

💻 Вопрос из собеседования: Как использовать `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(). Идеально для динамического программирования и чистых функций. Надеюсь, это поможет вам пройти собеседование на желаемую вами работу, удачи🔥🔥🔥 Программистика || #jobs