Библиотека питониста | Python, Django, Flask
40.5K subscribers
2.78K photos
75 videos
51 files
4.37K links
Все самое полезное для питониста в одном канале.

Список наших каналов: https://t.iss.one/proglibrary/9197

Курс по ML: https://cl

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
Download Telegram
Холивар: запускать все тесты — или только нужные

Вопрос для питонистов: что лучше — полный прогон тестов при каждом пуше или выборочный запуск только нужных?

⚡️ Сторонники выборочного запуска говорят:
— «Мы изменили одну функцию в utils.py — зачем нам прогонять тесты на API, авторизацию и экспорт в Excel?»
— CI отрабатывает за 5 минут, а не за 40
— Меньше простаивания разработчиков в ожидании билдов
— Логи чище, меньше случайных падений

🐢 Сторонники полного прогона отвечают:
— «Вчера просто поправили формат даты в utils.py, и тихо умер отчёт в аналитике — в тестах API это бы поймали»
— Легче отлавливать неожиданные регрессии
— Нет сюрпризов после релиза
— CI — это страховка, а не ускоритель

Вот, например, кто-то предложил использовать Snob — инструмент, который экономит время и деньги, анализируя граф зависимостей Python-проекта и выбирая для запуска только те тесты, которые реально затронуты изменениями в коде.

📌 Что делает Snob:
— Отбрасывает ~99% тестов, не связанных с изменениями
— Ускоряет разработку и снижает стоимость CI
— Работает на основе статических импортов, а не предсказаний
— Не заменяет полный регрессионный прогон, но сильно помогает при разработке больших кодовых баз

⚠️ Чего Snob не делает:
— Не ловит динамические импорты, сайд-эффекты во время выполнения и другие неявные зависимости

💬 А теперь вопрос — вы бы доверили такому инструменту свой пайплайн, или всё-таки только полный прогон даёт спокойствие?

Библиотека питониста #междусобойчик
8👍1
🧐 Зоопарк моделей в ML: с чего начать?

Открываешь статью по машинному обучению — и в тебя летят слова: трансформеры, бустинги, SVM, регрессии.

Кажется, придётся учить всё это, иначе в ML не пустят.

Хорошая новость: 90% задач можно закрыть 2–3 классическими методами. Разберёшь их — уже сможешь собирать работающие проекты. А хайповые названия подождут.

Важно: не распыляйся на всё подряд. Начни с базового — это фундамент, на котором держится остальное.

👉 Успей попасть на курс «ML для старта в Data Science»
👍1
📚Напоминаем про наш полный курс «Самоучитель по 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
👍72❤‍🔥1
📱 Свежие релизы Python‑пакетов за последние 7 дней

👍 Важные обновления популярных библиотек
pydantic-ai / pydantic-ai-slim / pydantic-evals / pydantic-graph 0.6.0 — развитие AI-интеграций на базе Pydantic.
torch 2.8.0, torchvision 0.23.0, torchaudio 2.8.0 — крупное обновление PyTorch-стека.
sagemaker 2.250.0 — новая версия фреймворка для ML на AWS.
memray 1.18.0 — профайлер памяти для Python.
locust 2.38.0 — нагрузочное тестирование.
redis 6.3.0 — Python-клиент Redis.
openai 1.99.0 — доступ к API OpenAI, включая GPT-5.
hypothesis 6.137.0 — property-based тестирование.
accelerate 1.10.0 — ускорение обучения моделей.
sentence-transformers 5.1.0 — эмбеддинги и семантический поиск.
deepdiff 8.6.0 — сравнение сложных Python-структур.


🔥 Опыт других
Python: генераторные функции
Как я заменил кучу флагов двумя словарями в Python
15 типичных ошибок начинающих автоматизаторов (и как их избежать)

Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2
💼 Топ-вакансий для питонистов за неделю

Backend Python/Django —‍ от 3000 до 6000 $, удалёнка

Python Developer —‍ до 170 000 ₽, удалёнка

Odoo/Python разработчик —‍ до 200 000 ₽, удалёнка

Архитектор в AI проектах, удалёнка

Backend Lead (Python/Go), удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Python jobs

🐸 Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
3😁3
🔎 Текстовая схожесть: от regex до нейросетей

В реальном мире строки редко совпадают «под копирку».
Например:
"aPpLe iPhone® 14 Pro Max"
"iphone 14 pro max"


Вопрос — чем сравнивать? Ответ зависит от того, что именно вы хотите поймать.

1️⃣ Regex — чистим шум по шаблону

Идеален как первый шаг: убрать мусор, стандартизировать формат.
import re
def clean(t):
t = t.lower()
t = re.sub(r"[®©]", "", t)
return re.sub(r"\s+", " ", t).strip()

clean("iPhone® 14 Pro Max")
# 'iphone 14 pro max'


Приводит строки к общему виду
✖️ Не знает, что «наушники» и «headphones» — это одно и то же

2️⃣ difflib — встроенный baseline

Умеет считать похожесть на уровне символов. Отлично для быстрого «на коленке».
from difflib import SequenceMatcher
SequenceMatcher(None, "iphone 14 pro max", "i phone 14 pro max").ratio()
# 0.97


Ловит пробелы и опечатки
✖️ Путается, если слова меняются местами

3️⃣ RapidFuzz — быстрый и умный fuzzy

Оптимизированный под скорость и адекватнее реагирует на перестановку слов.

from rapidfuzz import fuzz
fuzz.WRatio("apple iphone 14 pro max", "iphone 14 pro max apple")
# 95


Справляется с разным порядком слов и лишними словами
✖️ Для него «wireless headphones» и «bluetooth earbuds» — разные вещи

4️⃣ Sentence Transformers — смысл > буквы

Нейросети, которые понимают значение, а не только текстовый паттерн.
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity

m = SentenceTransformer('all-MiniLM-L6-v2')
cosine_similarity(
[m.encode("wireless headphones")],
[m.encode("bluetooth earbuds")]
)[0][0]
# 0.75


Понимает синонимы и концептуальную близость
✖️ Требует ресурсов, особенно на больших данных

➡️ Как выбирать:
re → всегда первым шагом
difflib → мелкие задачи без зависимостей
RapidFuzz → продакшн, большие объёмы, сложные текстовые вариации
Sentence Transformers → смысл важнее скорости, есть GPU

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍4🔥2
Офлайн-митап Peer To Beer x Точка Банк: приходите слушать доклады и делиться своими историями

🍉 15 августа в Москве пройдёт митап для Python и Go-разработчиков. В программе доклады, открытый микрофон и нетворкинг-активности, которые организаторы подготовили вместе с Точка Банк — так что знакомства будут нескучными и позволят не только весело провести вечер, но и получше узнать друг друга.

🐤 Доклады
Юрий Маркин, Х5. Тернистый путь из Python в Golang
Поделюсь личным опытом работы с Golang, разбирая как его сильные стороны, так и аспекты, которые можно улучшить. Обсудим минимализм в дизайне, особенности defer, работу с горутинами и многое другое, с акцентом на баланс между плюсами и минусами.

Сурен Хоренян, ВК Реклама. А правда, что Golang быстрее Python?
Расскажу свой опыт работы с Go, и почему с высоты многолетнего опыта на Python мне выглядит странным большое внимание к Go в мире веб-разработки.

🐥 Открытый микрофон
Рассказывайте любую историю из любой сферы за 3 минуты: весёлую, странную, полезную. Приз достаётся тому, кому громче аплодируют.

‼️ Нетворкинг и тематические настолки
Будут знакомства, но нестандартные. Возможно, придётся жестами показывать прокси-сервер.

🥳Регистрация
После регистрации анкета пройдёт модерацию — собирают специалистов со схожим опытом, чтобы на нетворкинге всем было интересно.

📅 Когда: 15 августа, пятница. Старт регистрации в 19:00
📍Место: спот в районе станции метро Чистые пруды, детали отправят после подтверждения регистрации

Приходите, чтобы август запомнился не только арбузами и песнями Стрыкало.
Регистрируйтесь в боте @peertobeer_bot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🪙 Сколько вы стоите как разработчик: 3 способа не прогадать с зарплатой

Представьте: приходите на собеседование, называете сумму, а рекрутер сразу отвечает: «Хорошо, без проблем».

Звучит приятно? Не всегда. Часто это значит, что вы только что продешевили.

Чтобы не занижать себе цену:
1️⃣ Изучите вилки зарплат по вашей роли и региону.
2️⃣ Проанализируйте свой опыт, стек и редкие навыки.
3️⃣ Отрепетируйте разговор о деньгах, чтобы звучать уверенно.

📌 Полный разбор с примерами тут: https://proglib.io/sh/qJDGQMk2Hg

🐸 Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁1
📺 Хватит коллекционировать туториалы!

Десятки роликов по ML, сотни вкладок, папка «Посмотреть позже» трещит по швам. В голове — обрывки знаний о нейросетях и Pandas.

Знания без системы — это просто «шум». Они не превращаются в навыки и проекты.

Наш курс «ML для старта в Data Science» — это не ещё один туториал. Это система. Чёткий путь от «каши» в голове до первого сильного проекта в портфолио.

И да, чтобы старт был ещё проще — при покупке курса по ML вы получаете курс по Python в подарок

👉 Превратите «шум» в навык

А вы сталкивались с «информационной кашей»? Как выбирались? 👇
👍1
✔️ How to: 10 вещей, которые можно сделать с Python collections

Модуль collections — это кладезь специализированных контейнеров, которые упрощают код, делают его читаемее и иногда даже быстрее, чем стандартные dict, list, set и tuple.

Вот 10 приёмов, которые могут вас удивить:

1️⃣ Counter — быстрое подсчёты элементов

Используется для подсчёта количества вхождений элементов в последовательности и поиска наиболее частых значений:
from collections import Counter

words = ['galaxy', 'nebula', 'asteroid', 'comet', 'gravitas', 'galaxy', 'stardust', 'quasar', 'galaxy', 'comet']
word_counts = Counter(words)
print(word_counts.most_common(2))


2️⃣ namedtuple — «лёгкие» классы для хранения данных

Создаёт объекты с доступом к полям по имени и индексу, занимают меньше памяти, чем классы:
from collections import namedtuple

Book = namedtuple('Book', ['title', 'author', 'year_published', 'isbn'])
my_book = Book("The Hitchhiker's Guide to the Galaxy", "Douglas Adams", 1979, "978-0345391803")
print(my_book.title, my_book.year_published)


3️⃣ defaultdict — словарь без KeyError

Автоматически создаёт значение для нового ключа, что удобно для группировки данных:
from collections import defaultdict

grouped_scores = defaultdict(list)
for player, score in [('A', 8), ('B', 7), ('A', 6)]:
grouped_scores[player].append(score)
print(grouped_scores)


4️⃣ deque — быстрая очередь и стек

Двусторонняя очередь с быстрым добавлением и удалением с обоих концов:
from collections import deque

q = deque([1, 2, 3])
q.append(4)
q.popleft()
print(q)


5️⃣ OrderedDict — управление порядком элементов

Сохраняет порядок вставки и умеет перемещать элементы в конец или начало:
from collections import OrderedDict

od = OrderedDict(a=1, b=2, c=3)
od.move_to_end('a')
print(list(od.keys()))


6️⃣ ChainMap — объединение словарей без копирования

Позволяет искать ключи в нескольких словарях, как будто это один:
from collections import ChainMap

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
chain = ChainMap(dict1, dict2)
print(chain['b'])


7️⃣ deque с maxlen — ограниченный буфер

Хранит только последние N элементов, автоматически удаляя старые:
from collections import deque

history = deque(maxlen=3)
for cmd in ["cd ~", "ls", "pwd", "mkdir test"]:
history.append(cmd)
print(history)


8️⃣ defaultdict для вложенных структур

Легко создаёт многоуровневые словари без явной инициализации:
from collections import defaultdict
import json

def tree(): return defaultdict(tree)
nested = tree()
nested['user']['name'] = 'Alice'
print(json.dumps(nested, indent=2))


9️⃣ Counter — арифметика частот

Можно складывать, вычитать и находить пересечение частот элементов:
from collections import Counter

c1 = Counter(a=3, b=1)
c2 = Counter(a=1, b=2)
print(c1 + c2, c1 & c2)


🔟 deque.rotate — циклический сдвиг элементов

Быстро сдвигает элементы вправо или влево:
from collections import deque

d = deque([1, 2, 3, 4])
d.rotate(1)
print(d)


🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43