PythonTalk
4.75K subscribers
1.44K photos
47 videos
7 files
1.3K links
Привет, меня зовут Олег Булыгин 👋

🐍 Здесь я делюсь полезной информацией для тех, кто пишет код на Python: от разработки до Data Science.

По вопросам: @obulygin91
Download Telegram
Одна строчка кода, которая выдаёт в тебе новичка (или застрявшего в прошлом)

Серьезно, когда в следующий раз увижу в чужом коде for i in range(len(...)):, у меня глаз начнет дёргаться 🤨

Это не просто громоздко и неэффективно. Это маркер, который кричит: "Я мыслю как на Java/C, а не как на Python!". На одном из курсов, где я преподаю, во всех учебных материала так! 🤦‍♂️

Есть же элегантный, читаемый и просто правильный способ — enumerate().

Вот вам гайд, где всё по полочкам:
- Почему range(len()) — это кринж и антипаттерн.
- Как enumerate() делает код чище и понятнее.
- Про аргумент start, чтобы не писать i + 1.
- Про ошибку, из-за которой можно часами отлаживать код.
- И когда enumerate() наоборот не нужен.

🫱🏻 Читаем 🫲🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥93🙏21👎1🤔1💯1
🍕 Разбор задачки о доставке пиццы

Всем привет! Время разбирать задачку про курьеров и заказы. Задачка имеет очень лаконичное решение.

Ключевая идея для решения большинства подобных задач — сначала посчитать все возможные варианты без ограничений, а затем "отсечь" те, которые нарушают наши правила.

Самый математически красивый подход выглядит так:

import math

def count_valid_orders(n: int) -> int:
return math.factorial(2 * n) // (2**n)


🤔 Как это работает?

Давайте рассуждать по шагам.

1️⃣ Шаг 1: Все возможные перестановки.
Представим, что у нас есть 2n уникальных событий (P1, D1, P2, D2, ..., Pn, Dn). Сколько всего существует способов расставить их в линию? Правильно, это просто перестановки, то есть (2n)!.

2️⃣ Шаг 2: Учитываем наше правило.
Главное правило: Pi всегда должно стоять раньше Di.
Возьмём любую пару, например, (P1, D1). В общем числе перестановок (2n)! ровно в половине случаев P1 будет стоять раньше D1, а в другой половине — D1 раньше P1. Нас устраивает только первый вариант. Значит, чтобы отсечь все неподходящие варианты для пары (P1, D1), нужно поделить общее число перестановок на 2.

3️⃣ Шаг 3: Обобщаем на все пары.
У нас n таких независимых пар! Для каждой из них мы должны отсечь половину невалидных последовательностей. Поэтому мы делим общее число перестановок на 2 n раз.

Получаем финальную формулу: (2n)! / 2^n.

- Сложность по времени: O(N), так как вычисление факториала (2n)! занимает линейное время от его аргумента.
- Сложность по памяти: O(1).
4🔥3👍21🙏1
🍉 Как выбрать арбуз с помощью Python

Сезон арбузов в самом разгаре! Уже кушали? Если да, то точно столкнулись с извечной проблемой оптимизация процесса выбора арбуза.

Забываем дедовские методы, мы же не хотим полагаться на какую-то интуицию и субъективщину? В 21 веке такие важные решения должны приниматься исключительно на основе данных. Нам нужны метрики, пайплайны и воспроизводимые результаты!

Итак, представляю вам фреймворк Watermelon Driven Development (WDD).

Этап 1: Сбор данных

Подходим к арбузному развалу. Наша задача — собрать первичный датасет. Для каждого экземпляра (candidate) нам нужны следующие фичи:

- weight (float): Масса. Взвешиваем на местных весах. Если их нет — используем безмен или оцениваем на глаз, предварительно откалибровав руку на известном весе (например, на своем макбуке).
- volume (float): Объем. Определяется методом погружения в таз с водой, но на рынке это может вызвать подозрения. Поэтому аппроксимируем до эллипсоида и считаем по формуле. Замеры делаем рулеткой.
- acoustic_response (dict): Акустический отклик. Стучим по арбузу костяшкой пальца в трех разных точках (экватор, полюс №1, полюс №2). Записываем звук на диктофон. Позже прогоним через FFT-анализ для поиска резонансных частот.
- surface_pattern_complexity (float): Сложность паттерна полосок. Фотографируем и прогоняем через простенькую CV-модель для оценки энтропии изображения. Чем контрастнее и четче полоски — тем выше метрика.
- peduncle_dryness_coefficient (float): Коэффициент сухости хвостика. Значения от 0.0 (свежесрезанный, зеленый) до 1.0 (засохший, ломкий).
- stain_yellowness_index (int): Индекс желтизны земляного пятна. Используем цветовую палитру Pantone для точной оценки. Градация от 1 (белый) до 10 (насыщенно-желтый).

Этап 2: Препроцессинг и Feature Engineering

Сырые данные — мусор. Нам нужны производные признаки, которые действительно коррелируют с целевой переменной sweetness_score.

def preprocess_watermelon_data(candidates: list) -> pd.DataFrame:
processed_data = []
for candidate in candidates:
# Плотность - ключевой показатель!
candidate['density'] = candidate['weight'] / candidate['volume']

# Анализируем звук: "звонкий" звук имеет пик в определенном диапазоне частот
fft_peaks = analyze_fft(candidate['acoustic_response'])
candidate['is_sound_ringing'] = 500 < fft_peaks.main_freq < 800

# Нормализуем остальные фичи
# ... (тут сложная математика)

processed_data.append(candidate)

return pd.DataFrame(processed_data)


Этап 3: Модель принятия решений (Decision Model)

Никаких if-else! Это слишком примитивно. Мы будем использовать взвешенную скоринговую модель. Веса подобраны на основе анализа тысяч арбузов (нет).

# Веса фичей, подобранные экспертным путем в ходе A/B-теста
WEIGHTS = {
'density': 0.4,
'is_sound_ringing': 0.3,
'peduncle_dryness_coefficient': 0.15,
'stain_yellowness_index': 0.1,
'surface_pattern_complexity': 0.05,
}

def get_watermelon_score(candidate: pd.Series) -> float:
"""Рассчитывает итоговый скор для кандидата."""
score = 0
score += candidate['density'] * WEIGHTS['density']
score += candidate['is_sound_ringing'] * WEIGHTS['is_sound_ringing']
# ... и так далее для всех фичей
return score

# Выбираем арбуз с максимальным скором
best_watermelon = candidates_df.loc[candidates_df['score'].idxmax()]


Итоговый алгоритм:
1. Подходите к развалу.
2. Достаете ноутбук, весы, рулетку, диктофон и палитру Pantone.
3. На недоумевающие взгляды продавца и других покупателей отвечаете: "Спокойно, я шарю".
4. Скрупулезно собираете датасет по 5-10 кандидатам.
5. Запускаете Jupyter-ноутбук, выполняете все ячейки.
6. Модель выдает вам id лучшего арбуза.
7. Покупаете его.
8. Дома разрезаете... а он неспелый.

Потому что ваша модель переобучилась на локальных данных, не учла сезонные дрифты и аномалии в поставке! Нужна MLOps-инфраструктура, постоянный мониторинг и версионирование моделей. В следующем году построим.

#хих
😁298🤣53🔥31👍1👏11
Примеры функций для работы с файловой системой и файлами 🗂

– Что общего у программиста и пасечника?
– Импорт ос?
– import os


🤡 Пока вы перевариваете этот баян, переварите ещё и немного полезной информации 🤓
👍4🔥3😁21🙏1👌1💯1🏆1👾11
👨‍💻Вот постоянно слышу, что среди IT-специалистов очень распространён синдром самозванца (это когда, все считают, что ты право имеешь, а сам считаешь, что ты тварь дрожащая).

У меня тоже такие мысли, конечно, периодически проскакивают, но я давно нашёл очень простой способ с этим бороться.

🥁 Барабанная дробь... Раскрываю мегасекрет!

💬 Общайтесь с другими людьми!


Серьезно, кто постоянно в этом синдроме, вы вообще разговариваете с коллегами? 😅

Стоит мне пообсуждать с кем-то работу и любые другие профессиональные моменты, этот синдром очень быстро и надолго сдувает.
В "очередной раз" выясняется, что никто ни хрена не умеет, у всех везде велосипеды из говна и палок, вот-вот все рассыпится, сплошной треш и угар.

Главное — не получить синдром единственного адекватного человека в горящем дурдоме 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣14👍7😁52🔥2🤪221👏1🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
Погружаемся в Матрицу! 🤖

Вышла Matrix-Game 2.0 — интерактивная модель мира, которая в реальном времени (25 FPS!) генерирует окружение по командам с клавиатуры и мыши.

Проще говоря: вы жмете «W», и нейросеть на лету дорисовывает вам мир в стиле GTA или Minecraft, в котором вы движетесь вперед. Это уже не «сделай мне ролик», а «построй мне мир, я в нем поиграю».

Все это добро опенсорсное и на Python.

GTA VII уже будет полностью так генерироваться? 🤔

Для тех, кто хочет попробовать — написал гайд по запуску у себя на машине, с разбором зависимостей и кода.

👉 Читать здесь

#щупаем_сорцы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤯31🔥1😱11
Создали две переменные, используя фигурные скобки. В одной пусто, в другой – ноль. Потом сравнили их типы.

Казалось бы, что тут сложного?
👍2🙏1👌1
Что получим при запуске кода?
Anonymous Quiz
27%
True
6%
None
53%
False
14%
TypeError
3👍3👌2🙏1
Чего там, группу в Max 💩 уже надо переводить или ещё живём несколько месяцев?
Please open Telegram to view this post
VIEW IN TELEGRAM
20😁10😭6🤷‍♂3😢3🤣3🤷‍♀2🤬2🤡1🥴1🤷1
Вводим «санкции» и «тарифы» на импорт Python-библиотек 🗽

Наткнулся на забавный пакет tariff. Он позволяет делать вот так:

import tariff

# Вводим пошлины на "иностранные" пакеты
tariff.set({
"numpy": 50,
"pandas": 200,
})

# Теперь импорт будет медленнее...
import pandas


И после этого в консоль выводится сообщение в стиле Трампа:

JUST IMPOSED a 200% TARIFF on pandas! Original import took 87103 us, now takes 261309 us. American packages are WINNING AGAIN! #MIGA


Это, конечно, 10/10 😂

Для тех, кто в теме, это абсолютно шикарная демонстрация monkey-patching'а builtins.__import__.

Вот сам репо ◀️
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣84🤪3🔥1😁1
🎓Полный гайд по List Comprehensions в Python

В Python существует множество способов решить одну и ту же задачу, но не все они одинаково «питоничные». Классический подход к созданию списков через цикл for и метод .append() — яркий тому пример. Он работает, но часто бывает многословным и менее читаемым.

Именно для таких случаев и существуют списковые включения (List Comprehensions) — инструмент для создания списков в одну строку, декларативно и эффективно.

Эта статья поможет досконально разобраться в теме, от основ до неочевидных приемов. Внутри не только базовый синтаксис, но и продвинутые техники.

В общем, всё, что нужно, чтобы писать более чистый, выразительный и зачастую более быстрый код.
6👍411🔥1🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
Anthropic выкатили интересный апдейт для Claude Code: теперь можно переключить режим вывода кода командой /output-styles на режимы:

1️⃣ Explanatory: Claude не просто пишет код, а комментирует каждое свое решение. Почему выбрал именно такую архитектуру, какие были альтернативы, какие плюсы и минусы у подхода. По сути, это эмуляция опытного программиста, который сидит рядом и вслух проговаривает свой мыслительный процесс.

2️⃣ Learning: ИИ пишет код, а потом в ключевых местах останавливается, вставляет #TODO и говорит: "а вот этот кусок допиши-ка сам". Как бы парное программирование с ментором, который заставляет тебя думать, а не тупо копипастить.

Чтобы не брейнротить от копипасты любых ответов и для обучение — любопытный инструмент.
👍6🔥4🤔211🙏1
Недавно The New York Times выпустила материал с говорящим заголовком «Goodbye, $165,000 Tech Jobs. Student Coders Seek Work at Chipotle».

Суть, если коротко: золотая лихорадка для джунов в США закончилась. Обещания про «выучи код и будешь получать шестизначную зарплату на старте», на которых выросло целое поколение, разбились о суровую реальность 2025 года.

Несколько фактов из статьи:
- Парень по имени Зак Тейлор с дипломом computer science подал заявки на 5762 вакансии. Результат: 13 собесов, 0 офферов.
- Девушка Манаси Мишра, отучившись на программиста, единственное интервью получила в сети фастфуда Chipotle.
- Уровень безработицы среди свежих выпускников CS — 6.1-7.5%. Это вдвое выше, чем у выпускников с дипломом по биологии или истории искусств. Истории искусств, Карл!

Винят в этом две вещи:
1️⃣ Массовые увольнения в бигтехах, которые перегрели рынок.
2️⃣ Распространение ИИ-инструментов, которые автоматизируют как раз ту самую работу начального уровня, на которую раньше брали джунов.

Более того, статья описывает «ИИ-петлю обреченности» (AI doom loop): соискатели используют ИИ, чтобы массово рассылать сотни резюме, а компании используют ИИ, чтобы так же массово их отсеивать. Выхлоп — нулевой. Нейронки собеседуют нейронки, а человек в этой схеме — лишний. Все как в образовании 😂

Девушка из статьи, Манаси, работу в итоге нашла. Не программистом. А в технических продажах, куда пробилась благодаря своему TikTok-аккаунту.

До нас такие тренды доходят всегда с опозданием. Или нет? 😄
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚3😢2👨‍💻111