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

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

Yopiq kanal

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

Ko'proq ko'rsatish
5 579
Obunachilar
-524 soatlar
-437 kunlar
-10430 kunlar
Postlar arxiv
Работаете с СУБД? Присоединяйтесь к сообществу Pangolin! Телеграм-канал для разработчиков и администраторов баз данных. Pango
Работаете с СУБД? Присоединяйтесь к сообществу Pangolin! Телеграм-канал для разработчиков и администраторов баз данных. Pangolin — это PostgreSQL с 80+ доработками, и мы открыто рассказываем о его разработке. У нас вы найдете: • Технические детали и архитектурные решения • Разборы доработок PostgreSQL • Ответы на вопросы по эксплуатации и коду • Кейсы внедрения и оптимизации • Вакансии для тех, кто хочет работать с нами • Вебинары и встречи с экспертами • Знакомство с командой: хобби, книги и интересы Присоединяйтесь к сообществу, где говорят на языке баз данных Подписаться #реклама 16+ О рекламодателе

🗝 Секрет defaultdict: забудь про `if key in dict` Устал писать if key in dict: dict[key].append(x) else: dict[key] = [x] каждый раз, когда нужно собрать значения по ключам? В Python есть элегантный способ — defaultdict из модуля collections. Он сам создаёт значение по умолчанию для отсутствующего ключа. ❌ Было (муторно и длинно):
data = [('a', 1), ('b', 2), ('a', 3)]
result = {}
for key, val in data:
    if key in result:
        result[key].append(val)
    else:
        result[key] = [val]
✔️ Стало (чисто и понятно):
from collections import defaultdict

result = defaultdict(list)
for key, val in data:
    result[key].append(val)   # список создаётся автоматически
🟢 Почему это круто: - Кода меньше в 2–3 раза. - Читается как обычная фраза: «для ключа добавить значение». - Работает с любыми типами: defaultdict(int) для счётчиков, defaultdict(set) для уникальных значений. Любой тип можно подставить:
counter = defaultdict(int)
for word in text.split():
    counter[word] += 1   # вместо counter[word] = counter.get(word, 0) + 1
Забудь про ручные проверки — defaultdict сделает код проще и быстрее. Программистика|| #tips

Изоляция рунета ближе, чем ты думаешь Loading … ██████████████] 99% Роскомнадзору дали карт-бланш на блокировки, а «белые спи
Изоляция рунета ближе, чем ты думаешь
Loading ██████████████] 99%
Роскомнадзору дали карт-бланш на блокировки, а «белые списки» сайтов тестируют уже в десятках регионов. И гайки будут закручиваться только сильнее. Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack. Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса. Не жди момента «Х». Перестрахуйся подпиской.

На Stepik запустили курс «От новичка к уверенности в коде на Python» Курс создан для новичков, которым важно не заучить коман
На Stepik запустили курс «От новичка к уверенности в коде на Python» Курс создан для новичков, которым важно не заучить команды, а понять логику. Наглядные схемы и визуальные разборы показывают, что происходит внутри программы и как она работает Много практики, понятные объяснения решений не дадут застрять на теории. Материал предлагает вам не иллюзию знаний, а ощущение контроля: вы ясно видите как из нескольких строк кода рождается работающая программа Что внутри: ✅переменные и типы данных ✅условия и логика программ ✅циклы и рекурсия ✅функции и работа с вводом данных ✅списки, словари и множества ✅базовое ООП ✅работа с библиотеками Python ✅десятки задач и упражнений Эти знания фундамент для написания простых ботов и автоматизации задач Скидка 25%, действует 48 часов 🔗Пройти курс на Stepik

Все библиотеки и модули Python объясняются за 13 минут
🎥 Первоисточник
Программистика|| #video

Как разработчик решил параллельно найму пилить свои бизнес-проекты с нулевым опытом: дневник с передовой Меня зовут Александр Торбек, И я попал в день сурка: код писать умею, зарплата стабильная. Но в заднице зудит ощущение катастрофического застоя. Поэтому я сделал глупейшую вещь — начал разрабатывать продукты. Без связей, плана и стратегии. В блоге буду фиксировать: — идеи (и почему 90% из них — говно собаки) — что сделал, сколько заработал — мысли айтишника, который впервые думает как продакт, а не как тупой исполнитель Я хочу пройти весь путь от основателя продукта до продажника. И выяснить, смогу ли без бизнес-бэкграунда выйти на уровень дядек в элитных пиджаках. Если тоже хотите создавать свои продукты — посмотрите, как я набиваю шишки первым: @atorbek_it

Бесплатная конференция по PostgreSQL Регистрируйся на бесплатную конференцию по PostgreSQL — 19.03.2026.📅 Эксперты расскажут
Бесплатная конференция по PostgreSQL Регистрируйся на бесплатную конференцию по PostgreSQL — 19.03.2026.📅 Эксперты расскажут о разработке, администрировании и новинках мира Postgres. ✅ Бесплатное участие ✅ Опытные спикеры ✅ 25+ тематических докладов ✅ Рабочие кейсы Каждый участник получает именной Сертификат участника мероприятия. Одни из немногих спикеров конференции: — Андрей Бородин PostgreSQL Major contributor, руководитель подразделения разработки РСУБД с открытым исходным кодом Yandex Cloud — Родион Хабибов DevOps-инженер «СберСервис» — Андрей Овчаренко Руководитель отдела Java-разработки Московской биржи ... и многие другие. Регистрируйся, будет интересно! И бесплатно! Зарегистрироваться #реклама 16+ pgbootcamp.ru О рекламодателе

👩‍💻 Однострочники на Python: код, который объясняется кодом Однострочники в Python — это не только способ покрасоваться, но и отличный способ понять, как работают встроенные функции и генераторы. Когда ты видишь [x for x in ... if ...], внутри происходит целая симфония: итерация, фильтрация, создание списка. Давай разберём пару примеров и заглянем под капот. 👍 Пример 1: Плоский список из списка списков
matrix = [[1, 2], [3, 4], [5, 6]]
flat = [num for row in matrix for num in row]
print(flat)  # [1, 2, 3, 4, 5, 6]
Что здесь происходит? Этот comprehension можно переписать как обычный вложенный цикл:
flat = []
for row in matrix:
    for num in row:
        flat.append(num)
Но comprehension выполняется быстрее и записывается компактнее. Обрати внимание на порядок: сначала внешний цикл (for row in matrix), потом внутренний (for num in row), и наконец выражение num. Python интерпретирует именно так. Заглянем под капот:
def flatten_comp(matrix):
    return [num for row in matrix for num in row]

import dis
dis.dis(flatten_comp)
Вы увидите байт-код, где создаётся пустой список, затем два цикла FOR_ITER, и внутри LIST_APPEND. Понимание этого помогает писать эффективные comprehension. 👍 Пример 2: Словарь из двух списков (zip + dict)
keys = ['name', 'age', 'city']
values = ['Alice', 25, 'Moscow']
person = dict(zip(keys, values))
print(person)  # {'name': 'Alice', 'age': 25, 'city': 'Moscow'}
Что здесь происходит? zip соединяет элементы списков попарно, создавая итератор кортежей. dict принимает итератор пар и строит словарь. Это намного быстрее ручного цикла:
person = {}
for i in range(len(keys)):
    person[keys[i]] = values[i]
И компактнее, и эффективнее. Кстати, zip работает с любыми итерируемыми объектами и останавливается на самом коротком. Как это работает внутри:
pairs = zip(keys, values)
print(next(pairs))  # ('name', 'Alice')
print(next(pairs))  # ('age', 25)
# и так далее
👍 Пример 3: Быстрая фильтрация с filter и лямбдой
nums = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens)  # [2, 4, 6]
Что здесь происходит? filter принимает функцию и итерируемый объект, оставляет только те элементы, для которых функция вернула True. Но зачем лямбда? Можно использовать уже готовые функции. Например, для чётности можно было бы написать lambda x: not x % 2, но суть не в этом. Интересно, что filter возвращает итератор, поэтому мы оборачиваем в list(). Если элементов много, можно не создавать список сразу, а использовать ленивые вычисления. Развернём вручную:
def my_filter(func, iterable):
    for item in iterable:
        if func(item):
            yield item

evens = list(my_filter(lambda x: x % 2 == 0, nums))
👍 Пример 4: Условное выражение в генераторе списка
words = ['hello', 'world', 'python', 'code']
result = [w.upper() if len(w) > 4 else w for w in words]
print(result)  # ['hello', 'WORLD', 'PYTHON', 'code']
Что здесь происходит? Тернарный оператор x if condition else y внутри comprehension. Это не фильтр, а именно преобразование с условием. Важно понимать, что сначала выполняется for w in words, затем для каждого w вычисляется w.upper() if len(w) > 4 else w. Порядок: сначала цикл, потом выражение. Байт-код это подтвердит:
def f(words):
    return [w.upper() if len(w) > 4 else w for w in words]
Будет цикл, внутри вызов len, сравнение, и два пути — либо upper, либо просто w. 🔍 Задание для самопроверки: Напишите comprehension, который создаёт словарь, где ключи — числа от 0 до 9, а значения — их квадраты. А теперь объясните, как это работает внутри. Ответ:
{k: k**2 for k in range(10)}
Здесь итерация по range(10), для каждого k вычисляется пара k: k**2, и словарь собирается. Внутри — цикл и добавление элементов. 💡 Запомни: Чем лучше ты понимаешь, как работает "под капотом" обычный код, тем осознаннее будешь использовать короткие записи. Однострочники — это не цель, а средство. Главное — чтобы код оставался читаемым. А теперь попробуй сам разобрать любой свой comprehension с помощью dis.dis() — увидишь, как Python видит твой код. Программистика || #doc

Уйти из найма и работать удалённо на себя? Звучит как план на понедельник, но к четвергу отпускает. Я ни дня своей жизни не проработал «на дядю» — зато построил десятки собственных проектов и вывел их на монетизацию. Где-то стрельнуло, где-то прогорел, никакого инфоцыганства, только личный опыт и практика со всеми взлётами и падениями. У себя в блоге «айти на миллиард» пишу:
– Как находить идеи? – Как быстро запускать MVP? – Как привлекать первых пользователей?
Если тебе близка айти-сфера и ты давно хочешь создать свой пет-проект, нам по пути: https://t.me/+P9xCxnr5WlA1MjMy

👩‍💻 Вопрос с собеседования: Что такое замыкание (closure) и как оно работает в Python? Это один из вопросов, который проверяет, понимаете ли вы, как Python работает с областями видимости и функциями высшего порядка. Просто сказать «функция внутри функции» — мало. Надо показать, как захватываются переменные и где это применяется. 📌 Базовый ответ (которого ждут от джуна): Замыкание (closure) — это вложенная функция, которая запоминает значения переменных из внешней (охватывающей) функции, даже после того, как внешняя функция завершила выполнение.
def outer(x):
    def inner(y):
        return x + y
    return inner

add_5 = outer(5)      # x = 5 зафиксировано
print(add_5(10))      # 15 — inner помнит x
🧱 Глубокий разбор (для мидла и сеньора): 1. Как это работает (лексическая область видимости): При создании вложенной функции Python запоминает не только её код, но и окружение (словарь __closure__), где хранятся ссылки на переменные из внешних областей.
print(add_5.__closure__)      # (<cell at 0x...: int object at 0x...>,)
print(add_5.__closure__[0].cell_contents)  # 5
2. Ключевое слово `nonlocal`: Чтобы изменять захваченную переменную внутри замыкания, нужно объявить её как nonlocal. Иначе Python сочтёт её локальной.
def counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

c = counter()
print(c())  # 1
print(c())  # 2
3. Типичные применения: 🟢 Декораторы — классика: внешняя функция принимает функцию, внутренняя оборачивает её, используя аргументы декоратора. 🟢 Фабрики функций — создание специализированных функций на лету (как add_5 выше). 🟢 Обработчики событий / коллбэки — фиксация состояния в момент создания. 4. Ловушка: позднее связывание (late binding) В цикле все созданные замыкания запоминают одно и то же последнее значение переменной, если не использовать хитрость с аргументом по умолчанию.
funcs = []
for i in range(3):
    funcs.append(lambda: i)

for f in funcs:
    print(f())  # 2 2 2, а не 0 1 2

# Исправление:
funcs = []
for i in range(3):
    funcs.append(lambda x=i: x)   # фиксируем значение через аргумент
💡 Итоговый ответ для собеседования: 1. Определение: Вложенная функция, которая сохраняет доступ к переменным внешней функции после её завершения. 2. Механизм: Интерпретатор хранит ссылки на захваченные переменные в атрибуте __closure__. 3. Ключевой момент: Для изменения захваченной переменной внутри замыкания нужно nonlocal. 4. Где используется: Декораторы, фабрики функций, коллбэки, карринг. 5. Типичная ошибка: Позднее связывание в циклах — замыкания захватывают не значение, а переменную, поэтому все видят последнее значение. Запомните: джуну достаточно первого пункта и простого примера. Но если вы покажете __closure__, расскажете про nonlocal и упомянете ловушку с циклом — интервьюер поймёт, что вы действительно разбираетесь. Программистика || #jobs

⚡️Слита База из 1000+ топовых курсов и материалов для айтишников Отсортировали их для вашего удобства и выложили в телеграм-каналы по категориям: 🤖 Нейросети – 855+ материалов 🖥 Python — 1558+ материалов 👩‍💻 Frontend — 1241+ материалов 👩‍💻 Backend — 1095+ материалов ⚙️ Программы — 978+ материалов 📚 Книги по IT — 779+ материалов Всё лучшее про IT бесплатно — уже на Базе 🚀

🧠 Неизвестный кодер взломал ChatGPT и вывел систему из-под всех запретов После его промта нейросеть перестаёт «думать по пра
🧠 Неизвестный кодер взломал ChatGPT и вывел систему из-под всех запретов После его промта нейросеть перестаёт «думать по правилам» и начинает выдавать запретные материалы, 18+ графику и скрытые функции Этот человек анонимно выкладывает свои наработки бесплатно в НейроПульс: — Скрипт, отключающий лимит в ChatGPT и ещё 25 нейросетях — Промт, который создаёт вирусы даже под iOS — Алгоритм распознавания личных данных Сохраняй и пользуйся, пока доступно: https://t.me/+V19zvWBfVYIwN2Uy

🗂 WinFile — тот самый древний “Диспетчер файлов” из Windows 90-х. И да, Microsoft выложила его исходники на GitHub ещё в 201
🗂 WinFile — тот самый древний “Диспетчер файлов” из Windows 90-х. И да, Microsoft выложила его исходники на GitHub ещё в 2018-м. Это был их первый нормальный графический файл-менеджер: копировать/таскать/удалять мышкой — революция для тех лет. Репо тут: https://github.com/Microsoft/winfile Пару фактов, чтобы прочувствовать эпоху: первая версия была 16-битная и жила в мире 8.3: никаких пробелов, никаких “длинных имён”. Хотел “LongFileName.txt”? Получай LONGFI~1.TXT. потом переписали под Windows NT (32-bit) — длинные имена, NTFS, взрослая жизнь. как компонент Windows он дожил до NT 4.0 SP6a, а последняя 16-битная версия — до Windows Me. В репозитории код из ветки NT4, слегка подпиленный, чтобы нормально собираться на современных Windows/VS и запускаться на 64-битах. Запускаешь — и ловишь главное: Windows тащит на себе такую обратную совместимость, что софт из прошлого века всё ещё оживает почти без сопротивления. Для безопасника это не “милота”, а напоминание: legacy в Windows — не баг, а образ жизни. ➡️Ссылка Карманный хакер

👩‍💻 Декораторы в Python: от простого к сложному (и не сойти с ума) Декораторы — одна из самых элегантных, но и самых пугающ
👩‍💻 Декораторы в Python: от простого к сложному (и не сойти с ума) Декораторы — одна из самых элегантных, но и самых пугающих фич Python для новичков. "Функция, которая принимает функцию и возвращает функцию, которая оборачивает функцию"... Звучит как заклинание. На деле же это просто способ добавить код до и после вызова функции, не меняя её саму. Разбираемся, как перестать бояться и начать декорировать. 🧱 Что такое декоратор (на пальцах) Декоратор — это функция, которая принимает другую функцию и возвращает её же, но с «прицепом». Представь, что ты хочешь логировать каждый вызов функции. Вместо того чтобы вставлять print в каждую функцию, ты пишешь один декоратор и просто «надеваешь» его на нужные функции знаком @. Пример простейшего декоратора:
def logger(func):
    def wrapper(*args, **kwargs):
        print(f"Вызов функции {func.__name__} с args={args}, kwargs={kwargs}")
        result = func(*args, **kwargs)
        print(f"Результат: {result}")
        return result
    return wrapper

@logger
def add(a, b):
    return a + b

add(2, 3)
# Вывод:
# Вызов функции add с args=(2, 3), kwargs={}
# Результат: 5
Синтаксический сахар @logger делает то же самое, что и add = logger(add). Просто и красиво. 🧱 Когда декораторы — это хорошо (и удобно) 1️⃣. Логирование и отладка:
```python
def log_calls(func):
    def wrapper(*args, **kwargs):
        print(f"→ {func.__name__}")
        return func(*args, **kwargs)
    return wrapper

@log_calls
def process_data():
    # ... долгая работа
    pass
```
2️⃣. Замер времени выполнения:
```python
import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        print(f"{func.__name__} выполнена за {time.time()-start:.3f} сек")
        return result
    return wrapper

@timer
def heavy_computation():
    time.sleep(1)
```
🧱 Когда декораторы могут навредить (антипаттерны) 1. Потеря имени и документации исходной функции:
def logger(func):
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapper

@logger
def hello():
    """Говорит привет"""
    print("Hello")

print(hello.__name__)  # 'wrapper' — потеряли имя!
print(hello.__doc__)   # None — потеряли документацию!
Решение: использовать functools.wraps:
from functools import wraps

def logger(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapper
2. Слишком много декораторов (читаемость падает):
@login_required
@require_http_methods(["POST"])
@csrf_exempt
@cache_page(60)
@transaction.atomic
def my_view(request):
    # Что тут вообще происходит?
    pass
Совет: группируйте декораторы, выносите сложную логику в отдельные функции. 3. Декоратор с аргументами (без понимания):
def repeat(n):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            for _ in range(n):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def say():
    print("Ку-ку")
Здесь repeat — это фабрика декораторов. Сначала вызывается repeat(3), она возвращает декоратор, который уже применяется к функции. Если запутались — ничего страшного, пишите явно: @repeat(3). 🔗 Подробнее в статье 👍 Запомни: Декораторы — это не магия, а просто синтаксический сахар для замыканий. Они делают код чище и переиспользуемее. Начинай с простых (@timer, @logger), а потом переходи к фабрикам с аргументами. И никогда не забывай про @wraps. Программистика || #Статья

Поздравление с 23 февраля!! Сегодня, день,когда мы отмечаем мужество, отвагу и преданность. В этот особый день хочется пожела
Поздравление с 23 февраля!! Сегодня, день,когда мы отмечаем мужество, отвагу и преданность. В этот особый день хочется пожелать Вам:
1) Смелости в принятии решений и стремлении к новым вершинам. 2) Удачи в каждом начинании и ярких побед. 3) Счастья в кругу близких и друзей. 4) Здоровья и крепкой энергии для реализации всех планов. 5) Вдохновения в работе и личной жизни.
Пусть каждый день будет наполнен яркими моментами, а ваши сердца всегда будут полны решимости и доброты. Спасибо, что вы с нами, и пусть наш канал продолжает приносить радость и полезную информацию!!! С праздником, дорогие друзья 🎉

Поздравление с 23 февраля!! Сегодня, день,когда мы отмечаем мужество, отвагу и преданность. В этот особый день хочется пожела
Поздравление с 23 февраля!! Сегодня, день,когда мы отмечаем мужество, отвагу и преданность. В этот особый день хочется пожелать Вам:
1) Смелости в принятии решений и стремлении к новым вершинам. 2) Удачи в каждом начинании и ярких побед. 3) Счастья в кругу близких и друзей. 4) Здоровья и крепкой энергии для реализации всех планов. 5) Вдохновения в работе и личной жизни.
Пусть каждый день будет наполнен яркими моментами, а ваши сердца всегда будут полны решимости и доброты. Спасибо, что вы с нами, и пусть наш канал продолжает приносить радость и полезную информацию!!! С праздником, дорогие друзья 🎉

⚡️Hype Tech анонимно публикует промпты, ломающие ИИ-ограничения Генерируй 18+ изображения, создавай вирусы и упрости ЛЮБУЮ ру
⚡️Hype Tech анонимно публикует промпты, ломающие ИИ-ограничения Генерируй 18+ изображения, создавай вирусы и упрости ЛЮБУЮ рутину — всё это бесплатно и в открытом доступе Топ-промты от Hype Tech: • Баг на бесконечный доступ в NanoBanana и ChatGPT • Промпты для снятия цензуры с ChatGPT • Полный пробив и поиск скрытых данных человека Подпишись и забери самые мощные ИИ для твоего арсенала: https://t.me/+xjSLfhZQOwMGQy