🐍 Итоги недели в мире Python и обзоры новых инструментов: как сделать генератор резюме на Python

🐍 Итоги недели в мире Python и обзоры новых инструментов: как сделать генератор резюме на Python

Привет!

Всю неделю мы мониторим интернет, чтобы в воскресенье прислать тебе интересное письмо. Наша цель – держать читателей в курсе последних открытий и тенденций в мире Python. В еженедельных письмах ты найдешь:

  • Новые возможности в последних версиях Python
  • Работа с базами данных и SQL в Python.
  • Веб-разработка на Django и Flask.
  • Машинное обучение и анализ данных с помощью Python.
  • Автоматизация и работа с API на Python.
  • Тестирование и отладка кода на Python.
  • Задачи для новичков с решениями.

Странное сравнение чисел в Python; Как сделать генератор резюме на Python; Как использовать Blender в Jupyter Notebook; Как сделать приложение на Streamlit.

🎸 Как Python сравнивает целые и вещественные числа

При сравнении int и float в Python иногда можно получить неожиданные результаты:

🐍 Итоги недели в мире Python и обзоры новых инструментов: как сделать генератор резюме на Python

Это связано с:

  • Представлением конкретных чисел в памяти.
  • Деталями алгоритма сравнения целых и вещественных чисел, реализованного в CPython.

Представление чисел в памяти

  • В формате IEEE-754 с двойной точностью, используемом для хранения чисел с плавающей запятой, есть ограничение на количество бит, выделенных для представления мантиссы (52 бита). Это означает, что некоторые числа не могут быть представлены точно. В случае с числами 9007199254740992.0 и 9007199254740993.0 происходит именно эта ситуация – оба числа имеют одинаковое бинарное представление в формате IEEE-754, так как в случае 9007199254740993.0 младший значащий бит мантиссы теряется при нормализации. В итоге, внутри Python оба числа представлены как 9007199254740992.0.
  • И напротив, число 9007199254740994.0 может быть точно представлено в формате IEEE-754, так как младший значащий бит мантиссы не теряется.

Алгоритм сравнения CPython

При сравнении Python использует специальный алгоритм, который пытается избежать непосредственного сравнения битовых представлений целых и вещественных чисел. Вместо этого алгоритм анализирует знаки, экспоненты в нормализованном представлении и только в конце, если другие случаи не подходят, сравнивает целочисленные части.

С учетом особенностей представления и сравнения получаем:

  • 9007199254740992 == 9007199254740992.0 дает True, так как внутренние целочисленные представления равны.
  • 9007199254740993 == 9007199254740993.0 дает False, поскольку в соответствии с IEEE-754 9007199254740993.0 представлено в памяти как 9007199254740992.0, и CPython, по сути, сравнивает 9007199254740993 и 9007199254740992.0.
  • 9007199254740994 == 9007199254740994.0 дает True, потому что оба числа точно представлены и имеют равные целочисленные части.

Подробный разбор особенностей представления и сравнения чисел – в этой статье.

🐍 Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста»

🔧 Инструменты

📜 Работа с JSON

orjson работает быстрее и обращается с JSON данными корректнее, чем стандартная библиотека (и большинство сторонних).

Производительность

  • Бибиотека частично написана на Rust, оптимизирована для максимальной производительности при сериализации/десериализации JSON.
  • Использует оптимизированные алгоритмы и инструкции процессора для работы с числами с плавающей запятой и целыми числами.
  • Эффективно использует память, применяя разделяемые строки-ключи в объектах JSON.

Нативная поддержка типов данных

  • Сериализует dataclass в 40-50 раз быстрее, чем другие библиотеки, упаковывая их прямо в объекты JSON
  • Нативно работает с numpy.ndarray – в 4-12 раз быстрее других библиотек и с меньшим использованием памяти.
  • Поддерживает удобные форматы для datetime, UUID, включая RFC 3339.
  • Строгое соответствие стандарту JSON.
  • Отклоняет некорректные строки UTF-8 при сериализации/десериализации.
  • Не принимает специальные числовые значения Nan, Inf, -Inf.
  • Предоставляет возможность строго ограничить диапазон целых чисел до 53 бит.

Дополнительные возможности

  • Добавление перевода строки в конец сериализованной строки.
  • Отображение времени в формате UTC как "Z" вместо "+00:00".
  • Опция для пропуска микросекунд в datetime объектах.
  • Возможность сортировать ключи в объектах по алфавиту.
  • Произвольные объекты можно сериализовать, указав пользовательскую функцию.

Портируемость

  • Работает на Linux (amd64, aarch64, ppc64le, s390x), macOS (amd64, aarch64) и Windows (amd64, x86).
  • Не имеет зависимостей, кроме libc.
  • Исходный код содержит все зависимости внутри для сборки без подключения к сети.
Диапазон целочисленных значений можно ограничить с 64 до 53 бит для совместимости с браузерами
Диапазон целочисленных значений можно ограничить с 64 до 53 бит для совместимости с браузерами
🐍🎓 Подтянуть свои знания по Python вы можете на нашем телеграм-канале «Библиотека собеса по Python»

🎨 Blender в Jupyter Notebook

ipyblender_experimental позволяет использовать рендеринговый движок Blender в блокнотах Jupyter Notebook. Пока что инструмент совместим только с Python 3.10. Видеоклипы с примерами можно посмотреть в этих твитах – первый, второй.

Так выглядят визуализации Blender в блокнотах
Так выглядят визуализации Blender в блокнотах

✨ Шаблон для PyShiny

Шаблон Tapyr упрощает процесс создания и развертывания корпоративных панелей данных (дашбордов) на базе PyShiny:

  • Обеспечивает оптимальную структуру кода.
  • Предоставляет средства для управления зависимостями, тестирования, контейнеризации и непрерывной интеграции.
  • Предусматривает возможность быстрого деплоя на платформе Posit Connect.

🔥 Интересные проекты

✍️ Конструктор резюме

Resume Builder – генератор резюме: содержимое редактируется в файле resume.py, а скрипт resume_builder.py рендерит информацию в виде HTML-страницы. Эту страницу можно конвертировать в PDF (с помощью «Печать в PDF») в браузере. Готовое резюме содержит всю необходимую информацию об опыте работе, навыках и контактах, и занимает одну страницу:

🐍 Итоги недели в мире Python и обзоры новых инструментов: как сделать генератор резюме на Python

🔍 Метапоисковая система

Метапоисковик не индексирует веб-страницы напрямую, а агрегирует и объединяет результаты из нескольких других поисковых систем и дополнительных источников. Преимущества метапоисковиков:

  • Более широкий охват – одновременно ищут по многим обычным поисковикам, давая более полные результаты.
  • Конфиденциальность – не отслеживают данные о пользователях, не собирают историю поиска и не создают пользовательские профили, как это делают многие крупные поисковые системы.
  • Разнообразие источников – можно искать не только по основным поисковикам, но и по специализированным базам данных, каталогам и т.д.
  • Удобство – один поисковый запрос сразу же получает результаты из многих разных мест.

Один из таких метапоисковиков – опенсорсный SearXNG, написанный на Python. SearXNG ведет поиск по 70 различным поисковикам, не отслеживает пользователей и не хранит их данные, и может использоваться с Tor.

🐍🧩 Интересные задачи по Python для практики можно найти на нашем телеграм-канале «Библиотека задач по Python»

🏝️ Фреймворк для фулстек-разработки на Python

Rio – новый фреймворк, который позволяет разрабатывать веб-приложения полностью на Python, без необходимости использовать HTML, CSS или JavaScript. Вот его основные преимущества:

  • Отсутствие разделения на фронтенд и бэкенд – Rio прозрачно обрабатывает всю коммуникацию между клиентом и сервером, скрывая детали работы с HTTP-запросами.
  • Декларативный интерфейс. Интерфейсы в Rio строятся из повторно используемых компонентов (по примеру React, Flutter и Vue.js). Результат – модульный интерфейс, который легко расширять и поддерживать.
  • Более 50 встроенных UI-компонентов на основе Material Design от Google.
  • Использование всех современных возможностей Python – аннотаций типов, асинхронного программирования и т. д.
  • Совместимость с отладчиком Python – к любому запущенному процессу можно подключиться отладчиком для отслеживания ошибок.
  • Универсальность – с помощью фреймворка можно сделать сайт любой сложности, дашборд для анализа и визуализации данных, интерфейс для стороннего API.
Примеры приложений на сайте Rio
Примеры приложений на сайте Rio

И напоследок – туториал по Streamlit для дата-сайентистов. Автор показывает, как создать и опубликовать простое приложение, и сравнивает Streamlit с двумя другими популярными инструментами, которые чаще всего используются при создании DS/ML приложений – Dash и Taipy.

Автор рассылки: Наталья Кайда

44
Начать дискуссию