Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Git Notes — тайная фича Git, о которой никто не говорит
Представьте: вы не можете изменить старый коммит, но вам нужно оставить комментарий. Вот тут и приходят на помощь git notes:
И теперь:
🛠 Где это уже используется
— Git-проект сам хранит ссылки на обсуждения коммитов в mailing-листе в notes.
— В Gerrit через плагин
— Некоторые команды используют notes, чтобы считать потраченное время на фичу или хранить автоматические отчёты.
🚀 Да, можно даже свой GitHub построить
Проект git-appraise от Google — распределённая система code review прямо внутри Git. Без сервера, с возможностью писать ревьюшки, комментировать и даже мёржить изменения — всё оффлайн.
🤔 Почему никто не использует
— Неочевидный UX
— Плохо документировано
— Не поддерживается большинством хостингов (GitHub, GitLab не показывают notes)
📌 Но если вы разрабатываете свой CI/CD, систему ревью или просто автоматизируете dev workflow — git notes могут быть сокровищем.
Библиотека питониста #буст
git notes
позволяют добавлять метаданные к любому объекту в git (commit, tree, blob) без изменения самих объектов.Представьте: вы не можете изменить старый коммит, но вам нужно оставить комментарий. Вот тут и приходят на помощь git notes:
git notes add -m 'Reviewed-by: QA Bot'
И теперь:
git log
# ...
# Notes:
# Reviewed-by: QA Bot
🛠 Где это уже используется
— Git-проект сам хранит ссылки на обсуждения коммитов в mailing-листе в notes.
— В Gerrit через плагин
reviewnotes
можно добавлять результаты тестов и ревью прямо в git log
.— Некоторые команды используют notes, чтобы считать потраченное время на фичу или хранить автоматические отчёты.
🚀 Да, можно даже свой GitHub построить
Проект git-appraise от Google — распределённая система code review прямо внутри Git. Без сервера, с возможностью писать ревьюшки, комментировать и даже мёржить изменения — всё оффлайн.
🤔 Почему никто не использует
— Неочевидный UX
— Плохо документировано
— Не поддерживается большинством хостингов (GitHub, GitLab не показывают notes)
📌 Но если вы разрабатываете свой CI/CD, систему ревью или просто автоматизируете dev workflow — git notes могут быть сокровищем.
Библиотека питониста #буст
🤯 Мы больше года строим мультиагентные системы
Грабли, находки, паттерны, эксперименты — всё это накопилось и в какой-то момент стало жалко держать только у себя.
Никита — рассказывает (и показывает) базу: токенизация, LLM, SFT, PEFT, локальный инференс + RAG и как оценивать его качество.
Диана — как строят мультиагентные системы, какие есть паттерны проектирования и библиотеки.
Макс — про инференс в проде + разберет CoPilot, соберет с вами из кусочков свой копайлот, а затем его сломает через prompt injection. // Макс фанат autogen (а если нет — он вас разубедит в своем классном канале)
Финальным аккордом Дима углубится в MCP и соберет несколько кейсов повзрослее.
Курс тут: https://clc.to/47pgYA
Промокод:datarascals действует до 23:59 29 июня
Грабли, находки, паттерны, эксперименты — всё это накопилось и в какой-то момент стало жалко держать только у себя.
Никита — рассказывает (и показывает) базу: токенизация, LLM, SFT, PEFT, локальный инференс + RAG и как оценивать его качество.
Диана — как строят мультиагентные системы, какие есть паттерны проектирования и библиотеки.
Макс — про инференс в проде + разберет CoPilot, соберет с вами из кусочков свой копайлот, а затем его сломает через prompt injection. // Макс фанат autogen (а если нет — он вас разубедит в своем классном канале)
Финальным аккордом Дима углубится в MCP и соберет несколько кейсов повзрослее.
Курс тут: https://clc.to/47pgYA
Промокод:
Часто смена одного неудачного алгоритма кардинально меняет ситуацию: запросы начинают выполняться за миллисекунды, а жалобы пользователей исчезают.
Читайте дальше: https://proglib.io/sh/BZ6EzqDbaW
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🧩 Задача: неожиданный результат с изменением словаря
Что выведет следующий код?
❓ Вопросы:
1. Какой будет вывод каждой из трёх строк?
2. Почему
3. Как изменить функцию, чтобы оригинальный словарь не менялся, а возвращалась новая копия с обновлённым значением?
Подвох:
Словари — изменяемые объекты, передаются по ссылке, поэтому любые изменения внутри функции влияют на оригинал.
Решение:
Что проверяет задача:
✅ Понимание изменяемых объектов и передачи по ссылке в Python
✅ Умение создавать копии объектов для избежания побочных эффектов
✅ Навыки работы с функциями и аргументами
Библиотека питониста #междусобойчик
Что выведет следующий код?
def update_dict(d, key, value):
d[key] = value
return d
my_dict = {'a': 1, 'b': 2}
print(update_dict(my_dict, 'c', 3))
print(update_dict(my_dict, 'd', 4))
print(my_dict)
❓ Вопросы:
1. Какой будет вывод каждой из трёх строк?
2. Почему
my_dict
меняется после вызова функции?3. Как изменить функцию, чтобы оригинальный словарь не менялся, а возвращалась новая копия с обновлённым значением?
Подвох:
Решение:
def update_dict(d, key, value):
new_dict = d.copy()
new_dict[key] = value
return new_dict
Что проверяет задача:
Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих»
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
🐍 Свежие релизы Python‑пакетов за последние 7 дней
✅ Gymnasium 1.2.0 — новая версия «переименованного» Gym: единое API для RL‑задач и обширный набор окружений
✅ LangGraph 0.5.0 — фреймворк для построения stateful‑приложений с несколькими LLM‑акторами
✅ aioboto3 15.0.0 — асинхронная обёртка над boto3 для AWS
✅ lxml 6.0.0 — мощная обработка XML на базе libxml2/libxslt + ElementTree
✅ transformers 4.53.0 — SOTA‑модели для JAX, PyTorch и TensorFlow
✅ mcp 1.10.0 — SDK для Model Context Protocol
✅ chdb 3.4.0 — in‑process OLAP‑движок на ClickHouse
✅ Diffusers 0.34.0 — диффузионные модели в PyTorch и JAX
✅ junitparser 4.0.0 — манипуляция XML‑отчётами JUnit/xUnit
✅ Pybtex 0.25.0 — процессор BibTeX‑совместимых библиографий
✅ Instructor 1.9.0 — структурированный вывод из LLM
✅ Robyn 0.70.0 — супершустрый async‑фреймворк на Rust‑рантайме
Библиотека питониста #свежак
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Data Science | тесты, код, задания
Что выведет код?
Anonymous Quiz
57%
{1:3, 2:4}
4%
{3:1, 4:2}
29%
{1: [3, 4], 2: [3, 4]}
10%
{[1, 2]:[3, 4], [1, 2]:[3, 4]}
Программист Python junior — от 90 000 до 125 000 ₽, гибрид (Москва)
Python/ML Lead — от 300 000 ₽, гибрид (Москва)
Senior Python Developer — от 6 000 до 7 000 $, удалёнка
Backend разработчик (Python DRF), удалёнка
Python-разработчик (FastAPI/Django, Kafka, PostgreSQL) — от 150 000 до 170 000 ₽, удалёнка
Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
Проблема: для понимания внутренней механики квантовых вычислений полезно иметь собственный симулятор. Однако большинство разработчиков используют готовые библиотеки (Qiskit, Cirq), что скрывает фундаментальные детали: как образуются суперпозиции, проводятся операции, как происходит измерение.
Решение: авторы предлагают построить пошаговый симулятор, реализованный на Python. Это не просто упражнение — это шанс «потрогать» основы: векторы состояния, гейты, измерения и крах симуляции при измерении. В репозитории из официального companion‑кода иллюстрируется весь процесс.
Ниже упрощённая версия – ключевые части симулятора из главы о квантовых состояниях:
import numpy as np
class QubitRegister:
def __init__(self, n):
self.n = n
# старт: |0…0⟩
self.state = np.zeros(2**n, dtype=complex)
self.state[0] = 1.0
def apply_gate(self, gate, target):
"""Применяет матричный gate к qubit 'target'"""
full = 1
for i in range(self.n):
full = np.kron(full, gate if i == target else np.eye(2))
self.state = full @ self.state
def measure(self):
probs = np.abs(self.state)**2
outcome = np.random.choice(len(probs), p=probs)
# Проекция на классическое состояние
result = np.zeros_like(self.state)
result[outcome] = 1.0
self.state = result
return bin(outcome)[2:].zfill(self.n)
# Использование:
qr = QubitRegister(2)
H = np.array([[1, 1], [1, -1]]) / np.sqrt(2)
qr.apply_gate(H, target=0) # суперпозиция первого qubit
print("Перед измерением:", qr.state)
print("Измерено:", qr.measure())
Преимущества:
— Глубинное понимание формирования состояния и действия гейтов.
— Код открыт, минималистичен, легко адаптируется.
— Прекрасная демонстрация квантового измерения на уровне программиста.
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🗳 Глобальные переменные, инкапсуляция и области видимости в Python
В Python область видимости (scope) определяет, где переменная видна и как долго живёт.
Основные области видимости:
📝 Локальная — внутри функции
📝 Глобальная — на уровне модуля
📝 Классовая/экземплярная — внутри класса (атрибуты класса и объекта)
🔎 Почему локальные переменные работают быстрее глобальных
Python ищет переменную по правилу LEGB: Local → Enclosing → Global → Built-in
Поиск начинается с самой узкой области — локальной, где переменных меньше, и поиск происходит быстрее.
Пример на замере времени:
✅ Результат: локальные переменные работают заметно быстрее.
🔎 Важно вспомнить об инкапсуляции — ключевом инструменте организации и оптимизации кода
Инкапсуляция:
📝 Локализует переменные внутри классов и функций
📝 Уменьшает количество отслеживаемых интерпретатором переменных
📝 Предотвращает конфликты имён и защищает данные
📝 Позволяет контролировать доступ к атрибутам через методы (getter/setter)
Пример сравнения класса с инкапсуляцией и без:
✅ В реальных приложениях инкапсуляция помогает писать более надежный и поддерживаемый код.
🔎 Ключевые преимущества инкапсуляции и локальных переменных:
📝 Снижение нагрузки на интерпретатор — быстрее выполняется код
📝 Улучшение управления памятью — локальные переменные освобождаются после выхода из функции
📝 Защита данных и уменьшение числа ошибок
🔎 Вывод
Для повышения производительности и удобства поддержки используйте локальные переменные и инкапсуляцию. Это простой, но мощный способ оптимизации вашего кода.
Библиотека питониста #буст
В Python область видимости (scope) определяет, где переменная видна и как долго живёт.
Основные области видимости:
Python ищет переменную по правилу LEGB: Local → Enclosing → Global → Built-in
Поиск начинается с самой узкой области — локальной, где переменных меньше, и поиск происходит быстрее.
Пример на замере времени:
import time
def local_test():
a = 0
for _ in range(1000000):
a += 1
b = 0
def global_test():
global b
for _ in range(1000000):
b += 1
start = time.time()
local_test()
print(f"Локальные переменные: {time.time() - start:.4f} сек")
start = time.time()
global_test()
print(f"Глобальные переменные: {time.time() - start:.4f} сек")
Локальные переменные: 0.5668 сек
Глобальные переменные: 1.1951 сек
Инкапсуляция:
Пример сравнения класса с инкапсуляцией и без:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class EncapsulatedRectangle:
def __init__(self, width, height):
self._width = width
self._height = height
def get_width(self):
return self._width
def set_width(self, width):
self._width = width
def area(self):
return self._width * self._height
Для повышения производительности и удобства поддержки используйте локальные переменные и инкапсуляцию. Это простой, но мощный способ оптимизации вашего кода.
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
В некоторых задачах требуется запускать Python-проекты без Docker-образов, чтобы напрямую обращаться к машине и драйверам GPU без дополнительных абстракций.
В таком случае удобным решением становятся runnable-файлы — Python wheel, которые можно собрать с помощью Poetry и использовать в CI/CD.
Основные этапы настройки:
pyproject.toml
настроить включение необходимых пакетов при сборке wheel:[tool.poetry]
packages = [
{ include = "main_dir" },
]
poetry.toml
указать репозиторий для публикации:[repositories.my-registry]
url = "https://europe-west1-python.pkg.dev/my-project/my-registry/"
rm -fr dist/ # Удаление старых сборок для предотвращения конфликтов
sed -I.back 's/^version = "[^"]*"/version = "1.0.post'"$(date +%Y%m%d%H%M)"'"/' pyproject.toml # Динамическое обновление версии
poetry publish --build --repository my-registry
gcloud artifacts print-settings python --project=my-gcp-project --repository=my-registry --location=europe-west1
pip install my-project
python -m my_job # Запуск проекта
Преимущества такого подхода:
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Последняя неделя перед стартом курса по AI-агентам
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
👌 Что умеют множества (set) в Python
1️⃣ Множество ≠ список
🔢 Нет дубликатов.
🔢 Порядок не гарантирован.
🔢 Быстро добавлять / удалять / проверять наличие элемента.
2️⃣ «Словарь без значений»
Вместо словаря вида
используйте множество:
Дубликаты исчезнут, а кода станет меньше.
3️⃣ Молниеносная проверка «есть ли элемент»
Преобразование списка в
4️⃣ Сет‑арифметика одним символом
Когда нужно узнать общие или уникальные элементы двух коллекций — множества решают задачу одной строкой.
5️⃣ Конвертируем «на ходу»
Нужно сохранить порядок, но иногда делать быстрые проверки?
Создаём
6️⃣ Мгновенная проверка дубликатов
Одна строка — и вы знаете, есть ли повторения.
Когда выбирать set:
1. Убрать дубликаты, если порядок не важен.
2. Быстро проверить «есть ли элемент».
3. Сравнить коллекции с помощью
4. Проверить уникальность элементов списка.
Библиотека питониста #буст
fruits = {"apples", "strawberries", "pears", "apples"}
print(fruits) # {'apples', 'pears', 'strawberries'}
Вместо словаря вида
colors = {"red": None, "green": None, "blue": None}
используйте множество:
colors = {"red", "green", "blue"}
Дубликаты исчезнут, а кода станет меньше.
numbers = [int(n) for n in open("numbers.txt")]
numbers_set = set(numbers) # создание множества
no_neighbors = [
n for n in numbers
if n-1 not in numbers_set and n+1 not in numbers_set
]
Преобразование списка в
set
резко ускорит поиск (O(1) вместо O(n)).a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
a | b # объединение → {1, 2, 3, 4, 5, 6}
a & b # пересечение → {3, 4}
a - b # только в a → {1, 2}
a ^ b # в одном, но не в двух → {1, 2, 5, 6}
Когда нужно узнать общие или уникальные элементы двух коллекций — множества решают задачу одной строкой.
Нужно сохранить порядок, но иногда делать быстрые проверки?
words = open("words.txt").read().split()
word_set = set(words)
anadromes = [w for w in words if w[::-1] in word_set]
Создаём
set
ради быстрых проверок, но сами данные храним в списке.nums = [1, 2, 3, 2]
has_dupes = len(nums) != len(set(nums)) # True
Одна строка — и вы знаете, есть ли повторения.
Когда выбирать set:
1. Убрать дубликаты, если порядок не важен.
2. Быстро проверить «есть ли элемент».
3. Сравнить коллекции с помощью
| & - ^
.4. Проверить уникальность элементов списка.
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🧠 «Поиграйся с LLM, почитай про агентов — и сам поймёшь, как это работает»
Это один из самых бесполезных советов, который мы слышали в адрес тех, кто хочет разобраться в AI-агентах.
Поиграйся — это как?
Потыкать пару промптов в ChatGPT и решить, что теперь ты можешь строить мультиагентные системы? 🤡 Ну-ну.
AI-агенты — это не «очередная обёртка над GPT». Это архитектура. Состояния, инструменты, цепочки вызовов, память, оценка качества и адекватность поведения.
➡️ Чтобы разобраться, нужно:
— понимать, как устроен LLM под капотом
— уметь подключать внешние данные (RAG, retrievers, rerankers)
— уметь масштабировать и дебажить поведение агентов
— разбираться в фреймворках вроде AutoGen, CrewAI, LangChain
— знать, как всё это тащится в прод
Если вы реально хотите не «поиграться», а научиться собирать рабочие агентные системы — у нас стартует курс по разработке ИИ-агентов 5го июля
P.S: не упусти свой шанс, промокод:LASTCALL на 10.000₽
Это один из самых бесполезных советов, который мы слышали в адрес тех, кто хочет разобраться в AI-агентах.
Поиграйся — это как?
Потыкать пару промптов в ChatGPT и решить, что теперь ты можешь строить мультиагентные системы? 🤡 Ну-ну.
AI-агенты — это не «очередная обёртка над GPT». Это архитектура. Состояния, инструменты, цепочки вызовов, память, оценка качества и адекватность поведения.
➡️ Чтобы разобраться, нужно:
— понимать, как устроен LLM под капотом
— уметь подключать внешние данные (RAG, retrievers, rerankers)
— уметь масштабировать и дебажить поведение агентов
— разбираться в фреймворках вроде AutoGen, CrewAI, LangChain
— знать, как всё это тащится в прод
Если вы реально хотите не «поиграться», а научиться собирать рабочие агентные системы — у нас стартует курс по разработке ИИ-агентов 5го июля
P.S: не упусти свой шанс, промокод: