50319
Всё самое интересное из мира Python Сотрудничество, реклама: @devmangx Работаем с @Spiral_Yuri РКН: https://clck.ru/3GMMF6
Хочешь понять, как работает Git — напиши свой.
Линус Торвальдс прославился тем, что написал Git за один день на C, уложившись в 1000 строк — и закоммитил его через Git. Сейчас проект насчитывает >500k строк, но его ядро можно реализовать за одни выходные.
Write Yourself a Git – пошаговое руководство, помогающее создать упрощённую версию Git на Python. Автор показывает, как за ~978 строк кода реализовать ключевые команды Git: init, add, commit, log, checkout, status и другие — при этом всё остаётся совместимым с настоящим Git
Git кажется сложным, но его ядро на удивление простое. Проект wyag позволяет «разобрать его на атомы» и понять фундаментальные концепции через код 😡
👉 @PythonPortal
Наткнулся на прикольный ресурс для изучения SQL
Это интерактивный тренажёр, который позволяет практиковаться в написании SQL-запросов прямо в браузере.
Подойдёт и новичкам, и тем, кто хочет освежить SELECT, JOIN и другие команды на практике 📝
👉 @PythonPortal
Топ-10 распространённых магических методов в Python__init__(self) – Инициализация нового объекта__str__(self) – Строковое представление__repr__(self) – Представление для отладки__len__(self) – Длина объекта__getitem__(self, key) – Доступ к элементу по индексу/ключу__setitem__(self, key, value) – Установка значения по индексу/ключу__delitem__(self, key) – Удаление элемента по ключу__eq__(self, other) – Проверка на равенство__add__(self, other) – Поведение оператора сложения +__call__(self, ...) – Делает экземпляр вызываемым как функция
👉 @PythonPortal
Auto PY to EXE — это open-source инструмент для упаковки Python-проектов в исполняемые файлы, который гораздо проще в использовании, чем pyfuze
Он предоставляет наглядный графический интерфейс: просто выбираешь скрипт, настраиваешь нужные параметры и нажимаешь кнопку запуска —> весь процесс упаковки проходит без необходимости возиться с командной строкой.
Дополнительно можно сохранять часто используемые настройки, отслеживать процесс в реальном времени и просматривать подробные логи. 📖
Инструмент кроссплатформенный, поддерживает Windows, macOS и Linux, а установка через pip максимально простая:
pip install auto-py-to-exe
Это шпаргалка по библиотеке NumPy
Краткое руководство по основным операциям и функциям для работы с массивами в Python. 😄
👉 @PythonPortal
Я только сегодня узнал об этом трюке с GitHub
Просто введите repo.new в адресной строке браузера — и сразу откроется страница создания нового репозитория на GitHub.
Такой простой способ сэкономить время 🤯
👉 @PythonPortal
Буквально за считанные минуты собери умного чат-бота для своего сайта
Firecrawl только что выкатили Firestarter — полноценную платформу для чат-ботов, которая:
🔸Скрейлит твой сайт
🔸Индексирует контент
🔸Разворачивает чат-интерфейс с поддержкой RAG и API в стиле OpenAI
Полностью open-source - ccылка
Попробуйте: ссылка
👉 @PythonPortal
Наткнулся на библиотеку art — делает ASCII-арт из текста за секунды.
Простая установка:
pip install art
from art import text2art
Art = text2art("art") # шрифт по умолчанию
print(Art)
# Пример вывода:
# _
# __ _ _ __ | |_
# / _` || '__|| __|
# | (_| || | | |_
# \__,_||_| \__|
Art_block = text2art("art", font='block', chr_ignore=True)
print(Art_block)
# Выведет крупный блок‑текст
Если хочешь вкатиться в ML, а не просто читать теорию, начинай с практики прямо в браузере.
В этом курсе всё: туториалы, Colab-ноутбуки и реальные примеры.
Будешь тренировать модели на Python с TensorFlow, визуализировать в TensorBoard и деплоить хоть в браузер, хоть на сервер.
Подходит и для новичков, и для тех, кто уже пробовал Keras или NumPy 😊
👉 @PythonPortal
Возможность Python, которую часто недооценивают -> операции над множествами
Вот пример, как можно удалять или обновлять теги, приводя старые и новые значения к множествам, а затем выполняя операции над множествами
Очистка и приведение к множествам:
existing = {t for tag in old_tags if (t := tag.strip())}
incoming = {t for tag in new_tags if (t := tag.strip())}tag.strip() удаляет пробелы с начала и конца строки.t := tag.strip() сохраняет очищенное значение в переменную t.if (t := tag.strip()) фильтрует пустые строки ("").updated = existing - incoming
print("Removed tags:", updated)
updated = existing | incoming
print("Added tags:", updated)
Основатель школы автотестировщиков QA.GURU проводит бесплатный интенсив «Из баг-репортов до первого автотеста на Python»
🔜 Во вторник, 24 июня, в 12:00 по МСК. Бесплатно.
Вы начинающий автоматизатор или ручной тестировщик? Займите место сейчас ▶
За несколько часов опытный инженер объяснит, как написать и запустить автотест 🤓
Что сделаете за занятие:
— Напишете свой автотест на Python с нуля.
— Настроите рабочую среду за 10 минут (и она реально будет работать).
— Разберётесь, когда использовать Selenium, Playwright или Selene.
— Запустите автотест с Pytest и без него.
И совсем немного о трендах QA:
— Зачем компаниям QA, которые умеют писать код.
— Python + автотесты как минимальный входной билет в индустрию.
— Нейросети: конкурент или ассистент?
Станислав Васенков, основатель школы — в прошлом — Head of QAA pflb.ru, автор allure-notifications, победитель хакатона от EPAM, спикер Heisenbug.
Занять место ▶
Реклама. Рекламодатель: ИП Васенков Станислав Олегович, ИНН 774335827403, erid: 2Vtzqw51r9U
Этот репозиторий на GitHub настоящая находка для каждого дата-сайентиста
DS Interactive Python — это репозиторий с интерактивными дашбордами для изучения статистики, моделей машинного обучения и других концепций Data Science.
Темы включают: PCA, бэггинг и бустинг, кластеризацию, нейронные сети и др.
Полностью open-source и бесплатен 😮
👉 @PythonPortal
Совет по Python:
Использование setdefault
Метод setdefault() позволяет заменить 4 строки традиционного кода, избавляя от необходимости использовать условие if и ручную инициализацию.setdefault() чётко передаёт намерение: «Если ключ отсутствует, установить для него пустой список. Затем добавить элемент в список». Это одновременно делает код короче и понятнее
Есть ли причины использовать это вместо collections.defaultdict? 🤔
setdefault можно указывать разное значение по умолчанию при каждом вызове, тогда как у defaultdict одно общее значение для всех отсутствующих ключей. Метод setdefault также удобен тем, что не требует импорта =)
ТОП‑7 расширений для прокачки VSCode, Cursor и Windsurf: 📝
① Console Ninja
Показывает вывод консоли прямо в редакторе
② Error Lens
Выводит ошибки линтера и компиляции прямо в строке кода
③ Image Preview
Показывает превью изображений при наведении курсора
④ REST Client
Позволяет делать HTTP‑запросы и получать ответы прямо в редакторе
⑤ Version Lens
Управление версиями и обновление зависимостей из package.json и не только
⑥ Highlight on Copy
Мерцающая подсветка скопированного текста - видно, что именно ты скопировал
⑦ Symbols
Лучшая подборка иконок для типов файлов - делает интерфейс визуально чище
👉 @PythonPortal
Совет по чистому коду на Python:
Проверяйте качество кода внутри CI-пайплайна с помощью этих библиотек:
• flake8 — контроль соблюдения стиля (PEP8)
• black — автоформатирование кода
• isort — сортировка и оптимизация импортов
• bandit — анализ кода на уязвимости безопасности
• safety — проверка зависимостей на известные уязвимости
👉 @PythonPortal
Совет по Python:
При объединении итерируемых объектов разной длины используй itertools.zip_longest() вместо zip(), чтобы все элементы были объединены в пары.zip() объединяет элементы, пока один из итерируемых не закончится:
>>> list(zip(letters, numbers))
[('a', 1), ('b', 2)]
zip_longest() продолжает объединение до конца самого длинного итерируемого объекта:>>> list(zip_longest(letters, numbers))
[('a', 1), ('b', 2), ('c', None)]
fillvalue позволяет указать значение-заполнитель для отсутствующих элементов:>>> list(zip_longest(letters, numbers, fillvalue='N/A'))
[('a', 1), ('b', 2), ('c', 'N/A')]
zip_longest, когда важно сохранить все данные, даже при разной длине итерируемых объектов 🤵
Совет по Python:
Функция locals()
Встроенная функция locals() возвращает словарь, представляющий текущую локальную таблицу символов.
Таблица символов — это структура, в которой Python хранит все имена (переменные, функции, классы и т.д.), доступные в определённой области видимости.
Когда locals() вызывается внутри функции, она возвращает словарь со всеми локальными переменными, определёнными в рамках этой функции.
В примере переменные z и x определены локально внутри функции. Переменная y = 20 является глобальной и не относится к области видимости my_func(). Поэтому locals() внутри my_func не включает y
👉 @PythonPortal
Использование контекстного менеджера как таймера
Большинство разработчиков ассоциируют контекстные менеджеры (with-выражение) только с работой с файлами. Но на самом деле этот паттерн решает более общую задачу.
Контекстные менеджеры идеально подходят для управления любыми ресурсами, у которых есть чёткий момент начала и завершения. Например:
• File I/O
• Сессии логирования
• Транзакции в базе данных
• Сетевые и БД-соединения
• Замер производительности
• Управление потоками и блокировкамиwith гарантирует, что инициализация и очистка ресурса будут выполнены автоматически, даже если в блоке возникнет исключение. Это делает код чище и надёжнее.
Вместо того чтобы вручную замерять время до и после блока кода, можно использовать контекстный менеджер — это чистое и питоничное решение.
Обычно контекстный менеджер реализуется как класс с методами __enter__ и __exit__
Но есть более лаконичный способ — использовать декоратор @contextmanager из модуля contextlib, чтобы писать генераторные менеджеры без лишнего шаблонного кода.
Пример как использовать контекстный менеджер как таймер прикрепил ✌️
👉 @PythonPortal
Это что игра What It Prints?
Да, это онлайн-игра‑головоломка для разработчиков и студентов, где нужно угадать, что выведет код. Простая и увлекательная: показывается фрагмент, а вы должны определить его вывод
Для самопроверки самое то 💯
👉 @PythonPortal
Совет по Python: deque.maxlen
Знаете ли вы, что можно задать максимальную длину списка, используя deque из модуля collections?
Класс deque (двусторонняя очередь) из модуля collections поддерживает параметр maxlen, который устанавливает максимальный размер очереди. Когда очередь достигает этого размера, добавление новых элементов автоматически удаляет элементы с противоположного конца, реализуя поведение "первым пришёл — первым ушёл" (FIFO) с ограничением по размеру.
В приведённом примере deque имеет максимальную длину 3. При добавлении значения 4 удаляется 1, что делает такую структуру идеальной для реализации скользящего окна последних трёх элементов 📖
👉 @PythonPortal
Совет по Pytest:
Используйте пользовательские маркеры pytest, чтобы добавлять метаданные к тестам.
Это упрощает организацию и запуск определённых групп тестов
В примере на изображении используются два пользовательских маркера:
🔹@pytest.mark.performance
– Применён к тесту для замера производительности test_page_load_time
🔹@pytest.mark.database
– Применён к тестам для работы с базой данных test_database_connection и test_data_integrity
Мы можем запускать выборочно, например тесты, помеченные маркером @pytest.mark.database
pytest -m database
Аналогично Unix-пайпам, в Python можно строить цепочки функций, переопределяя метод __or__
Это позволяет связывать операции так, что вывод одной функции становится входом для следующей → чисто, читаемо и удобно для композиции
Именно так LangChain реализует элегантные пайплайны вроде: chat_prompt | groq_model | output_parser
Пример:
class Pipe:
def __init__(self, func):
self.func = func
def __call__(self, x):
return self.func(x)
def __or__(self, other):
return self.__class__(lambda x: other(self(x)))
Pipe — обёртка над функцией__or__ (|) позволяет комбинировать пайпами, как в Unix__call__ делает объект вызываемым, как обычную функциюdouble = Pipe(lambda x: x * 2)
square = Pipe(lambda x: x ** 2)
pipeline = double | square
print(pipeline(3)) # (3 * 2) ** 2 = 36
Конструкции в Python, использующие блок else:
🔸Условный оператор if-else
🔸Цикл for-else
🔸Цикл while-else
🔸Блок try-except-else
На фото мы видим 4 примера:
1. проверяет условие. Если x < 5 — выполняется if, иначе — else
2. Цикл ищет i == 10. Не находит, break не срабатывает → выполняется else
> Блок else выполняется только если цикл не прерван через break
3. Цикл отрабатывает до конца, else выполняется после завершения while
> else не выполнится, если внутри цикла будет break
4. Пытается выполнить 10 / 2. Исключения нет — срабатывает else
> else выполняется только если не было исключений в try
👉 @PythonPortal
Ищем новичков во фронтенд-разработке и вёрстке сайтов.
Хотим помочь тебе собрать сайт, как полноценный заказ даже если ты никогда не кодил.
А именно:
- Сверстать веб-сайт на HTML + CSS;
- Реализовать функционал на JavaScript;
- Пощупать фронтенд-фреймворк Angular;
- Подключить Backend и загрузить сайт на хостинг;
- Использовать ChatGPT и Giga, как профи.
+ Помощь куратора на каждом этапе.
Чтобы в итоге ты своими руками разработал качественный сайт, который не стыдно добавить в портфолио или продать.
Такой опыт можно получить на бесплатном практикуме за 7 дней.
👉 Приходи на бесплатное обучение и зови с собой друзей
Бонусом получишь гайд для поиска работы и заказов на фронтенд-разработку.
Если хочешь стать скилловым бэкенд-разработчиком, то пили как можно больше проектов.
В этом курсе их три: генератор блогов, клон Netflix и клон Spotify.
Прокачаешь бэкенд на практике с Python, Django и PostgreSQL 😄
👉 @PythonPortal
Совет по Python:
Используйте команду poetry show --tree --why [package], чтобы отследить, откуда берётся пакет.
Она быстро показывает:
> какие пакеты от него зависят
> почему пакет был установлен
На примере показано, как команда
poetry show --tree --why pydantic
pyproject.toml или при разрешении конфликтов транзитивных зависимостей. 📝
🚴♂️Не надо изобретать велосипед
Главная ошибка стартаперов — пытаться сделать идеальный продукт, годами его дорабатывать, но так и не выпустить.
В своём канале я запустил челлендж: 12 проектов за 12 месяцев.
1️⃣ Ищем идею под существующий спрос (не из головы!)
2️⃣ Разрабатываем продукт
3️⃣ Занимаемся бесплатным продвижением
4️⃣ Оптимизируем и масштабируем
Формула проста:
1 запуск = 1 функция = решение 1 проблемы
Три главных правила:
✔️ Только проверенный спрос — через поисковые запросы, а не догадки.
✔️ Быстрый запуск — никакого перфекционизма.
✔️ Только США и ЕС — там платят за удобство.
Также в канале разбираю:
— Кто и зачем будет платить за микро-продукт?
— Главная ошибка начинающих стартаперов
— Микро-продукт vs стартап
— Как бесплатно продвигать продукт
Короче, рассказываю в канале без купюр: что работает, а что нет, сколько приносит и как продвигаем. Всё, что обычно скрывают.
Вы можете выполнить uv add --script /path/to/script.py, чтобы добавить встроенные зависимости в Python-скрипт. Если заголовок скрипта ещё не существует, uv сгенерирует его автоматически
Команда uv run http://script.py выполнит скрипт со всеми необходимыми зависимостями.
Не нужно создавать виртуальное окружение, устанавливать пакеты и т.д. ☺️
👉 @PythonPortal
VK Weekend Offer: отправьте заявку, пройдите интервью и получите офер!
28–29 июня VK проведёт Weekend Offer для бэкендеров с опытом от трёх лет. Участников со знанием Java, Go, Python или C++ ждут технические собеседования, знакомство с продуктами и, если всё сложится, офер уже в конце выходных.
Ребята много лет создают облачные решения, системы рекомендаций и поисковые движки — всё с миллионами пользователей в проде — и сейчас ищут новых коллег. Поэтому оставляйте заявку до 25 июня, чтобы попасть в команду за выходные!
Подробности — на сайте.
12 мощных инструментов для ваших ИИ-агентов
Вот краткое описание функций каждого из них
1. FileReadTool
Этот инструмент мгновенно извлекает данные из локальной файловой системы.
2. FileWriterTool
Позволяет агенту создавать или перезаписывать любые файлы.
3. CodeInterpreterTool
Мощный инструмент для выполнения кода на Python 3 в защищённой, изолированной среде
4. ScrapeWebsiteTool
Инструмент, предназначенный для извлечения и чтения содержимого указанного веб-сайта.
5. SerperDevTool
Позволяет агенту выполнять поиск в Google.
6. DirectoryReadTool
Позволяет агенту получать список содержимого папок и метаданные. Полезно для реализации RAG на основе файловой системы.
7. FirecrawlSearchTool
Инструмент, предназначенный для поиска по веб-сайтам и преобразования их содержимого в чистый Markdown или структурированные данные, пригодные для обработки агентами или языковыми моделями (LLM).
8. BrowserbaseLoadTool
Browserbase — это платформа для разработчиков, предназначенная для надёжного запуска, управления и мониторинга безголовых браузеров.
Этот инструмент позволяет запускать сессии безголового Chrome, которыми может управлять агент.
9. PDFSearchTool
Семантический RAG (извлечение и генерация с подсказками) по PDF-документам.
10. GithubSearchTool
Предоставляет агентам доступ к GitHub и возможность выполнять RAG по исходному коду.
11. TXTSearchTool
Молниеносное встраивание и поиск по текстовым файлам.
12. L2SQLTool
Инструмент Text2SQL, преобразующий естественный язык в SQL-запросы для поиска по структурированным базам данных.
👉 @PythonPortal