PythonTalk
4.85K subscribers
1.52K photos
49 videos
6 files
1.34K links
Привет, меня зовут Олег Булыгин 👋

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

По вопросам: @obulygin91
Download Telegram
Параметры и аргументы в Python

100% специалистов в 50% случаях путают термины "параметр" и "аргумент" 😰
Ничего не поможет, но на всякий случай объясним разницу.
👍11😁21🔥1🙏1
🧐 Где и кто использует ИИ для написания кода

Тут учёные мужи выкатили исследование: проанализировали 80 миллионов коммитов на Python от 200 тысяч разрабов, чтобы понять, как глубоко ИИ уже залез в наш код. Натренировали для этого специальную нейронку, которая палит сгенерированный код.

И вот что они откопали 👇🏻

1️⃣ Гонка вооружений. США ожидаемо впереди — там уже 30% Python-кода на GitHub пишет ИИ. Европа дышит в спину (Германия 24%, Франция 23%). А вот Россия и Китай — «поздние последователи», у нас всего 15.4%.

2️⃣ Джуны на стероидах. Самое интересное: новички юзают ИИ намного активнее ветеранов. У опытных разрабов только 28% кода сгенерировано, а у тех, кто только пришел на GitHub — аж 41%. Получается, ИИ сглаживает разрыв между джуном и сеньором? Или просто плодит тех, кто без Copilot и цикл написать не может?

3️⃣ ИИ как учитель. Использование нейронок подталкивает разрабов к экспериментам. Они начинают чаще пробовать новые библиотеки и их комбинации. То есть, ИИ не только пишет за тебя рутину, но и работает как спарринг-партнёр для изучения нового.

4️⃣ А деньги где? Консервативная оценка годовой экономической выгоды от ИИ в кодинге только в США — $9-14 миллиардов. А если верить более оптимистичным оценкам роста продуктивности — то все $64-96 миллиардов 😱. И это только за 2024 год.

Выходит, мы уже прошли стадию отрицания. ИИ — это не игрушка и не угроза, а фундаментальный сдвиг в работе программиста, который уже экономит миллиарды.
🔥7👍3👏2
GPT Researcher напишет за вас исследование🕵️‍♂️

GPT Researcher – это open-source агент для глубокого автоматизированного исследования на любую тему, будь то инфа из веба или ваши локальные доки. Обещают подробные, фактические и непредвзятые отчеты с цитатами.

Главная идея – разделить работу:
▫️ Планировщик генерирует исследовательские вопросы.
▫️ Исполнители (агенты) собирают инфу по каждому вопросу.
▫️ Паблишер собирает все в один красивый отчет.

Что этот инструмент умеет:
👉🏻 Deep Research: Продвинутый рекурсивный поиск, который копает вглубь темы.
👉🏻 Работа с локальными файлами: PDF, Word, Excel – все съест и переварит.
👉🏻 Мульти-агентная система на LangGraph для еще более качественных результатов.
👉🏻 Экспорт в PDF, Word и другие форматы.
👉🏻 Есть фронтенд (и легковесный, и на NextJS).

Для старта нужен Python 3.11+, ключи OpenAI и Tavily, а дальше pip install gpt-researcher или через git clone.
👍31👏1
🐍 from exercise import "Самый богатый"

Представьте, что у вас есть "таблица" accounts, где: accounts[i][j] — это сумма, которую некий j-й клиент имеет на счете в i-м банке.

Ваша задача — найти самый "богатого" клиента, то есть "столбец" с максимальной суммой всех счетов.

🎯 Задача:
Напишите функцию find_richest(accounts: list[list[int]]) -> int, которая принимает таблицу accounts и возвращает максимальную сумму по столбцам.

Пример:
accounts = [[1, 2, 5], [3, 6, 1]]

Разберем этот случай:
* Сумма accounts[0][0] + accounts[1][0] = 1 + 3 = 4.
* Сумма accounts[0][1] + accounts[1][1] = 2 + 6 = 8.
* Сумма accounts[0][2] + accounts[1][2] = 5 + 1 = 6.

Самый богатый клиент имеет состояние 8.
➡️ Ваша функция для [[1,2,5],[3,6,1]] должна вернуть 8.

Еще пример:
accounts = [[10, 5, 100], [20, 15, 0]]
* Портфель 0: 10 + 20 = 30
* Портфель 1: 5 + 15 = 20
* Портфель 2: 100 + 0 = 100
Результат: 100

#задача | 🍩 Поддержать канал 🫶
👍41🔥1
Сравниваем три gamedev-библиотеки на Python 🎮

Часто, когда речь заходит про разработку игр на Python, на ум приходит одно название — PyGame. Это, конечно, нестареющая классика, которой уже больше 20 лет, но мир не стоит на месте.

Вот вам небольшая подборка-сравнение трёх популярных библиотек: старого-доброго PyGame, портированного с C++ монстра Cocos2d и относительно свежего Ursina Engine.
🔥5🙏21
НОВАЯ ОТКРЫТАЯ SOTA LLM ДЛЯ ПРОГРАММИРОВАНИЯ 🤖

Недавно появился новый персонаж среди LLM для написания кода — Kimi-Dev-72B от Moonshot AI.

Что в неё интересного:
▫️Это новая SOTA (state-of-the-art) среди open-source моделей на бенчмарке SWE-bench Verified (60.4%). Подвинули всех старичков.
▫️Главная фишка — обучение. Модель получала награду, только если проходили все тесты в её Docker-окружении.
▫️Работает в два этапа: сначала находит нужные файлы для правки (File Localization), а потом уже редактирует код (Code Editing).
▫️Сделана на базе Qwen 2.5-72B, обучена на гигатоннах кода с GitHub. Лицензия — MIT, можно брать и ковырять.

Потыкать можно тут:
👉🏻 GitHub
👉🏻 Hugging Face
👉🏻 Демка-чат
👍42🙏1
✍️ Решения вчерашней задачи

Я провафлил, поэтому по факту позавчерашней 😬

🏆 Лучшее решение по Big O

def find_richest(accounts: list[list[int]]) -> int:
if not accounts or not accounts[0]:
return 0

num_clients = len(accounts[0])
max_wealth = 0

for client_index in range(num_clients):
current_client_wealth = 0
for bank_account in accounts:
current_client_wealth += bank_account[client_index]

if current_client_wealth > max_wealth:
max_wealth = current_client_wealth

return max_wealth


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

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

1. Проходим по клиентам: Внешний цикл for client_index in range(num_clients) итерируется по каждому "столбцу" (каждому клиенту).
2. Считаем накопления: Внутренний цикл for bank_account in accounts проходит по всем банкам (строкам) и суммирует деньги на счетах только текущего клиента.
3. Ищем максимум: После подсчета суммы для очередного клиента, мы сравниваем ее с уже найденным максимумом max_wealth и обновляем его, если нужно.

Сложность по времени: O(N * M), где N - количество банков (строк), M - количество клиентов (столбцов). Нам нужно проверить каждую ячейку.
Сложность по памяти: O(1). Мы используем всего несколько переменных для хранения промежуточных сумм и итогового максимума, не создавая новых больших структур данных.


🐍 Самое "питоничное" решение

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

def find_richest(accounts: list[list[int]]) -> int:
return max(map(sum, zip(*accounts)))


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

Разберем эту строку по частям, изнутри наружу:

1. *accounts — Оператор * "распаковывает" внешний список. Если accounts = [[1, 2], [3, 4]], то для функции zip это будет выглядеть как zip([1, 2], [3, 4]).

2. zip(*accounts) — Функция zip принимает несколько итерируемых объектов и "склеивает" их элементы с одинаковыми индексами. В нашем случае она "транспонирует" матрицу: из [[1, 2, 5], [3, 6, 1]] она создает итератор, который последовательно вернет кортежи-столбцы: (1, 3), затем (2, 6), и наконец (5, 1).

3. map(sum, ...) — Функция map применяет функцию sum к каждому элементу, который ей отдает zip. То есть, она вычисляет sum((1, 3)), sum((2, 6)) и sum((5, 1)), получая поток сумм: 4, 8, 6.

4. max(...) — Наконец, max просто находит наибольшее значение в этом потоке сумм. Результат — 8.

Сложность по времени: O(N * M). Хотя код и короткий, он всё так же проходит по каждому элементу для вычисления сумм.
Сложность по памяти: O(M). zip и map создают ленивые итераторы и не хранят всю транспонированную матрицу в памяти. Однако для работы zip требуется передать в функцию все строки как отдельные аргументы, что временно занимает память, пропорциональную количеству строк (N). В каждой итерации в памяти создается кортеж размером N (количество банков).

💡 Вариант с Numpy

Тоже отличный 👍🏻
import numpy as np
np.array(accounts).sum(axis=0).max()
👍9🔥2🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
Консольный помощник "The Fuck"🤬

Опечатались в консольной команде? Написали git comit вместо git commit или puthon вместо python? Есть гениальная Python-утилита, которая позволяет просто написать fuck после ошибочной команды, и она предложит исправленный вариант!

Например:
➜ puthon run_my_super_script.py
No command 'puthon' found...
➜ fuck
python run_my_super_script.py [enter/↑/↓/ctrl+c]

Или:
➜ apt-get install vim
E: Could not open lock file... are you root?
➜ fuck
sudo apt-get install vim [enter/↑/↓/ctrl+c]


▫️ Как это работает? У The Fuck куча правил для распознавания типовых ошибок (опечатки, забытый sudo, неправильные флаги git и т.д.).
▫️ Установка: Проще простого – pip3 install thefuck --user (или через brew / apt / pacman для вашей системы) и не забудьте добавить eval $(thefuck --alias) в ваш .bashrc или .zshrc. Можно даже eval $(thefuck --alias FUCK), чтобы ругаться ГРОМКО.

И есть "мгновенный режим" без подтверждений перед изменениями (fuck --yeah).
🔥12👍4😁2
Возвращаем значение из lambda-функции 🙃

#квиз | 🍩 Поддержать канал 🫶
🙏2🔥1
Что получим при запуске кода?
Anonymous Quiz
25%
SyntaxError
7%
None
15%
<function <lambda> at …>
53%
42
👍9🔥2🙏2