Как работать с Polars LazyFrames
Подробный туториал о работе с Polars LazyFrame. LazyFrame в Polars предоставляет эффективный способ обработки больших наборов данных через ленивые вычисления. В отличие от традиционных DataFrame, LazyFrame не содержит данных, а хранит набор инструкций, известных как план запроса. Это позволяет выполнять такие операции, как "predicate" и "projection pushdown", обеспечивая обработку только необходимых строк и столбцов. LazyFrame также поддерживает параллельное выполнение планов запросов, что дополнительно повышает производительность.
В статье рассматриваются следующие ключевые моменты:
- Создание LazyFrame с использованием функций, таких как
- Мониторинг эффективности LazyFrame.
- Механизмы, обеспечивающие эффективность LazyFrame, включая исследование оптимизированных и неоптимизированных планов запросов.
- Обработка больших объемов данных с помощью LazyFrame, включая использование потоковой обработки и определение случаев, когда ее следует применять.
- Критерии для определения пригодности использования LazyFrame в конкретных сценариях.
https://realpython.com/polars-lazyframe/
#python
👉 @python_real
Подробный туториал о работе с Polars LazyFrame. LazyFrame в Polars предоставляет эффективный способ обработки больших наборов данных через ленивые вычисления. В отличие от традиционных DataFrame, LazyFrame не содержит данных, а хранит набор инструкций, известных как план запроса. Это позволяет выполнять такие операции, как "predicate" и "projection pushdown", обеспечивая обработку только необходимых строк и столбцов. LazyFrame также поддерживает параллельное выполнение планов запросов, что дополнительно повышает производительность.
В статье рассматриваются следующие ключевые моменты:
- Создание LazyFrame с использованием функций, таких как
scan_parquet()
или scan_csv()
.- Мониторинг эффективности LazyFrame.
- Механизмы, обеспечивающие эффективность LazyFrame, включая исследование оптимизированных и неоптимизированных планов запросов.
- Обработка больших объемов данных с помощью LazyFrame, включая использование потоковой обработки и определение случаев, когда ее следует применять.
- Критерии для определения пригодности использования LazyFrame в конкретных сценариях.
https://realpython.com/polars-lazyframe/
#python
👉 @python_real
13 марта(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
Что узнаешь на прямом эфире от ШОРТКАТ:
1. Чего ждут от кандидатов на Middle позиции в Python-разработке
2. Какие вопросы задают на интервью и зачем
3. Как подготовиться к собесу, чтобы получить оффер
Это бесплатно?
Бесплатно
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqwxoKNX
Please open Telegram to view this post
VIEW IN TELEGRAM
LangGraph: Создание AI-агентов с сохранением состояния на Python
Эта статья рассказывает о LangGraph, новой библиотеке для Python, предназначенной для построения графов состояний с использованием LangChain. Она полезна для работы с агентами искусственного интеллекта, позволяя задавать сложные логические потоки в виде графов.
Основные моменты статьи:
- Как установить и настроить LangGraph.
- Создание простых графов состояний с узлами и переходами.
- Интеграция с LangChain для управления агентами ИИ.
- Разбор практических примеров, включая ветвление логики и параллельное выполнение задач.
Эта библиотека особенно полезна для создания сложных сценариев работы ИИ, например, чат-ботов с разными путями обработки запросов.
https://realpython.com/preview/langgraph-python/
#python
👉 @python_real
Эта статья рассказывает о LangGraph, новой библиотеке для Python, предназначенной для построения графов состояний с использованием LangChain. Она полезна для работы с агентами искусственного интеллекта, позволяя задавать сложные логические потоки в виде графов.
Основные моменты статьи:
- Как установить и настроить LangGraph.
- Создание простых графов состояний с узлами и переходами.
- Интеграция с LangChain для управления агентами ИИ.
- Разбор практических примеров, включая ветвление логики и параллельное выполнение задач.
Эта библиотека особенно полезна для создания сложных сценариев работы ИИ, например, чат-ботов с разными путями обработки запросов.
https://realpython.com/preview/langgraph-python/
#python
👉 @python_real
Производительность интерпретатора Python 3.14 с оптимизацией хвостовых вызовов
Примерно месяц назад проект CPython смерджил новую стратегию реализации интерпретатора байт-кода. Первоначальные результаты были очень впечатляющими, продемонстрировав среднее повышение производительности на 10-15% в широком спектре бенчмарков на различных платформах.
https://habr.com/ru/companies/ruvds/articles/891562/
original https://blog.nelhage.com/post/cpython-tail-call/
#python
👉 @python_real
Примерно месяц назад проект CPython смерджил новую стратегию реализации интерпретатора байт-кода. Первоначальные результаты были очень впечатляющими, продемонстрировав среднее повышение производительности на 10-15% в широком спектре бенчмарков на различных платформах.
https://habr.com/ru/companies/ruvds/articles/891562/
original https://blog.nelhage.com/post/cpython-tail-call/
#python
👉 @python_real
20 марта (в четверг) в 19:00 по мск приходи на открытый урок, где ментор объяснит, какую очередь лучше выбрать для своих проектов и не тратить время на переделки.
Разберем все, что нужно знать про очереди для работы и собесов:
Это бесплатно. Лекция проходит в рамках курса от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд и прокачать скиллы.
+ Все участники эфира получат бесплатный урок по System Design.
Переходи в бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqwLFHe7
Please open Telegram to view this post
VIEW IN TELEGRAM
О векторных базах данных простым языком
Представьте, что управляете онлайн-магазином, предлагающим тысячи товаров.
Чтобы помочь пользователям находить нужные позиции, вы добавили строку поиска. Теперь посетители могут вводить интересующие их запросы, на что вы будете показывать им подходящие результаты.
Например, когда пользователь вводит «лето», вы можете показывать предметы вроде шортов, платьев, панам и пляжных зонтов.
Как бы вы реализовали такую систему?
https://getdeploying.com/guides/vector-databases
#python
👉 @python_real
Представьте, что управляете онлайн-магазином, предлагающим тысячи товаров.
Чтобы помочь пользователям находить нужные позиции, вы добавили строку поиска. Теперь посетители могут вводить интересующие их запросы, на что вы будете показывать им подходящие результаты.
Например, когда пользователь вводит «лето», вы можете показывать предметы вроде шортов, платьев, панам и пляжных зонтов.
Как бы вы реализовали такую систему?
https://getdeploying.com/guides/vector-databases
#python
👉 @python_real
Три открытых урока для Python-разработчиков
Если уже освоили базовый Python и хотите прокачаться в веб-разработке — не пропустите бесплатные занятия от OTUS.
📺 Web-фреймворк на Python за час | 26 марта в 20:00 (Мск)
Разберём, как работает WSGI, создадим минимальный фреймворк с маршрутизацией и поймём, что лежит в основе Django.
→ Записаться
📺 Знакомство с Django REST Framework: создание API на Django | 17 апреля в 20:00 (Мск)
Узнаете, как строить REST API на Django, сделаете первый шаг к полноценным бэкенд-сервисам.
→ Записаться
📺 Асинхронное Django-приложение: работа с асинхронными ORM и views | 23 апреля в 20:00 (Мск)
Освоите asyncio в Django, научитесь писать асинхронные представления и взаимодействовать с БД.
→ Записаться
Записывайтесь на открытые уроки и получите практические знания из первых рук. Все занятия проводятся онлайн, а ведут их опытные разработчики!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Если уже освоили базовый Python и хотите прокачаться в веб-разработке — не пропустите бесплатные занятия от OTUS.
📺 Web-фреймворк на Python за час | 26 марта в 20:00 (Мск)
Разберём, как работает WSGI, создадим минимальный фреймворк с маршрутизацией и поймём, что лежит в основе Django.
→ Записаться
📺 Знакомство с Django REST Framework: создание API на Django | 17 апреля в 20:00 (Мск)
Узнаете, как строить REST API на Django, сделаете первый шаг к полноценным бэкенд-сервисам.
→ Записаться
📺 Асинхронное Django-приложение: работа с асинхронными ORM и views | 23 апреля в 20:00 (Мск)
Освоите asyncio в Django, научитесь писать асинхронные представления и взаимодействовать с БД.
→ Записаться
Записывайтесь на открытые уроки и получите практические знания из первых рук. Все занятия проводятся онлайн, а ведут их опытные разработчики!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Методы экземпляра, класса и статические методы в Python — просто о сложном
В Python у нас есть три типа методов: экземпляра (instance methods), классовые (class methods) и статические (static methods). Все они определяются внутри класса, но различаются по тому, как они работают и как к ним обращаться.
🧩 Методы экземпляра
Это наиболее распространённый тип. Они автоматически получают первым аргументом ссылку на объект (
Вызывается через экземпляр:
🧱 Классовые методы
Получают в качестве первого аргумента сам класс (
Вызывается через класс или экземпляр:
Часто используется как альтернативный конструктор:
🧊 Статические методы
Не получают ни
Вызывается так же:
🤔 Когда использовать какой метод?
- Используйте методы экземпляра, если нужно работать с данными конкретного объекта.
- Используйте классовые методы, если работаете с самим классом (например, создаёте объекты по альтернативной логике).
- Используйте статические методы, если метод связан с классом логически, но не требует доступа ни к данным экземпляра, ни к атрибутам класса.
https://realpython.com/instance-class-and-static-methods-demystified/
#python
👉 @python_real
В Python у нас есть три типа методов: экземпляра (instance methods), классовые (class methods) и статические (static methods). Все они определяются внутри класса, но различаются по тому, как они работают и как к ним обращаться.
🧩 Методы экземпляра
Это наиболее распространённый тип. Они автоматически получают первым аргументом ссылку на объект (
self
), через который можно обращаться к атрибутам и другим методам этого объекта.
class MyClass:
def instance_method(self):
print(f'Вызван instance_method: {self}')
Вызывается через экземпляр:
obj = MyClass()
obj.instance_method()
🧱 Классовые методы
Получают в качестве первого аргумента сам класс (
cls
). Это позволяет работать с атрибутами класса, а не отдельного объекта.
class MyClass:
@classmethod
def class_method(cls):
print(f'Вызван class_method: {cls}')
Вызывается через класс или экземпляр:
MyClass.class_method()
obj.class_method()
Часто используется как альтернативный конструктор:
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
@classmethod
def from_string(cls, book_str):
title, author = book_str.split(' - ')
return cls(title, author)
🧊 Статические методы
Не получают ни
self
, ни cls
. Это просто функции, определённые в теле класса для логической организации, когда они имеют отношение к классу, но не используют его состояние.
class MyClass:
@staticmethod
def static_method():
print('Вызван static_method')
Вызывается так же:
MyClass.static_method()
obj.static_method()
🤔 Когда использовать какой метод?
- Используйте методы экземпляра, если нужно работать с данными конкретного объекта.
- Используйте классовые методы, если работаете с самим классом (например, создаёте объекты по альтернативной логике).
- Используйте статические методы, если метод связан с классом логически, но не требует доступа ни к данным экземпляра, ни к атрибутам класса.
https://realpython.com/instance-class-and-static-methods-demystified/
#python
👉 @python_real
27 марта(уже в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках курса от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд и прокачать скиллы.
Все участники эфира получат бесплатный урок по System Design.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqvtqLrt
Please open Telegram to view this post
VIEW IN TELEGRAM
Представляем DuckDB
Если вы работаете с анализом данных в Python, скорее всего, вы используете такие библиотеки, как Pandas, NumPy и SQL. Но если ваши наборы данных становятся слишком большими для оперативной памяти или вы хотите более эффективную обработку, стоит обратить внимание на DuckDB — встроенную колонко-ориентированную СУБД, идеально подходящую для аналитических задач.
DuckDB позволяет запускать SQL-запросы прямо в Python, работать с DataFrame, Parquet, CSV и другими источниками данных без необходимости в отдельном сервере БД. Он прост в установке, кроссплатформенный и совместим с Pandas.
Основные фишки DuckDB:
- SQL-интерфейс, работающий с Pandas DataFrame, Arrow, Parquet и др.
- Высокая производительность благодаря колонко-ориентированному движку.
- Поддержка сложных SQL-запросов, включая оконные функции и CTE.
- Отсутствие необходимости в сервере — всё работает локально и быстро.
Пример использования:
Вы также можете напрямую читать файлы:
DuckDB отлично справляется с задачами типа:
- Быстрый SQL-анализ локальных файлов
- Встраивание SQL в Python без необходимости запускать Postgres/MySQL
- Обработка больших таблиц без загрузки всего в память
https://realpython.com/python-duckdb/
#python
👉 @python_real
Если вы работаете с анализом данных в Python, скорее всего, вы используете такие библиотеки, как Pandas, NumPy и SQL. Но если ваши наборы данных становятся слишком большими для оперативной памяти или вы хотите более эффективную обработку, стоит обратить внимание на DuckDB — встроенную колонко-ориентированную СУБД, идеально подходящую для аналитических задач.
DuckDB позволяет запускать SQL-запросы прямо в Python, работать с DataFrame, Parquet, CSV и другими источниками данных без необходимости в отдельном сервере БД. Он прост в установке, кроссплатформенный и совместим с Pandas.
Основные фишки DuckDB:
- SQL-интерфейс, работающий с Pandas DataFrame, Arrow, Parquet и др.
- Высокая производительность благодаря колонко-ориентированному движку.
- Поддержка сложных SQL-запросов, включая оконные функции и CTE.
- Отсутствие необходимости в сервере — всё работает локально и быстро.
Пример использования:
import duckdb
import pandas as pd
df = pd.read_csv("data.csv")
result = duckdb.query("SELECT column1, AVG(column2) FROM df GROUP BY column1").to_df()
Вы также можете напрямую читать файлы:
result = duckdb.query("SELECT * FROM 'data.parquet' WHERE value > 100").to_df()
DuckDB отлично справляется с задачами типа:
- Быстрый SQL-анализ локальных файлов
- Встраивание SQL в Python без необходимости запускать Postgres/MySQL
- Обработка больших таблиц без загрузки всего в память
https://realpython.com/python-duckdb/
#python
👉 @python_real
🧼 Методы
Работая с текстом в Python, часто нужно удалить лишние пробелы или символы с краёв строки. Именно для этого существуют методы
Основы
По умолчанию эти методы удаляют пробелы, переводы строк, табуляции и другие пробельные символы.
Удаление определённых символов
Можно передать в метод строку с символами, которые нужно удалить:
Важно: метод удаляет все указанные символы, а не подстроку. То есть
Применение в реальной жизни
- Очистка данных перед обработкой.
- Удаление лишних символов после парсинга.
- Нормализация пользовательского ввода.
Совет
Если нужно удалить только начало или только конец строки — используй
https://realpython.com/python-strip/
#python
👉 @python_real
strip()
, lstrip()
и rstrip()
в Python: удаление пробелов и символовРаботая с текстом в Python, часто нужно удалить лишние пробелы или символы с краёв строки. Именно для этого существуют методы
strip()
, lstrip()
и rstrip()
.Основы
text = " hello world "
print(text.strip()) # 'hello world'
print(text.lstrip()) # 'hello world '
print(text.rstrip()) # ' hello world'
По умолчанию эти методы удаляют пробелы, переводы строк, табуляции и другие пробельные символы.
Удаление определённых символов
Можно передать в метод строку с символами, которые нужно удалить:
text = ".,!?hello world!?.,"
print(text.strip(".,!?")) # 'hello world'
Важно: метод удаляет все указанные символы, а не подстроку. То есть
strip("abc")
удалит все a
, b
и c
, а не строку "abc"
.Применение в реальной жизни
- Очистка данных перед обработкой.
- Удаление лишних символов после парсинга.
- Нормализация пользовательского ввода.
Совет
Если нужно удалить только начало или только конец строки — используй
lstrip()
или rstrip()
соответственно.https://realpython.com/python-strip/
#python
👉 @python_real
🧠 Как копировать объекты в Python правильно?
📌 Статья объясняет разницу между поверхностным и глубоким копированием объектов в Python.
🔍 Основные моменты:
•
• Поверхностное копирование
• Глубокое копирование
• Для пользовательских классов можно определить методы
https://realpython.com/python-copy/
#python
👉 @python_real
📌 Статья объясняет разницу между поверхностным и глубоким копированием объектов в Python.
🔍 Основные моменты:
•
=
не копирует объект, а лишь создаёт новую ссылку на него.• Поверхностное копирование
(copy.copy())
создаёт новый объект, но вложенные объекты остаются общими.• Глубокое копирование
(copy.deepcopy())
рекурсивно копирует все вложенные объекты, обеспечивая полную независимость.• Для пользовательских классов можно определить методы
_copy_()
и _deepcopy_()
для контроля процесса копирования. https://realpython.com/python-copy/
#python
👉 @python_real
🔹 Что такое пространства имён в Python?
В Python пространство имён — это система, которая обеспечивает уникальные имена для всех объектов, таких как переменные и функции. Простыми словами, это своего рода словарь, в котором имена являются ключами, а объекты — значениями.
Существует несколько типов пространств имён:
- Локальные: существуют внутри функции.
- Глобальные: существуют на уровне модуля.
- Встроенные: предоставляются Python по умолчанию (например,
Python управляет этими пространствами имён с помощью LEGB-правила:
- Local — локальное пространство имён.
- Enclosing — пространство имён замыкающей функции.
- Global — глобальное пространство имён.
- Built-in — встроенное пространство имён.
Когда интерпретатор встречает имя, он ищет его именно в таком порядке.
Понимание пространств имён помогает избежать неожиданных ошибок и писать более чистый код!
https://realpython.com/python-namespace/
#python
👉 @python_real
В Python пространство имён — это система, которая обеспечивает уникальные имена для всех объектов, таких как переменные и функции. Простыми словами, это своего рода словарь, в котором имена являются ключами, а объекты — значениями.
Существует несколько типов пространств имён:
- Локальные: существуют внутри функции.
- Глобальные: существуют на уровне модуля.
- Встроенные: предоставляются Python по умолчанию (например,
len()
и print()
).Python управляет этими пространствами имён с помощью LEGB-правила:
- Local — локальное пространство имён.
- Enclosing — пространство имён замыкающей функции.
- Global — глобальное пространство имён.
- Built-in — встроенное пространство имён.
Когда интерпретатор встречает имя, он ищет его именно в таком порядке.
Понимание пространств имён помогает избежать неожиданных ошибок и писать более чистый код!
https://realpython.com/python-namespace/
#python
👉 @python_real
Генератор изображений кода на Python: делитесь кодом со стилем
Иногда вместо того, чтобы копировать и вставлять код, хочется поделиться красивым изображением с его фрагментом. Это особенно актуально для публикаций в соцсетях или документации. В этой статье рассматривается, как создать такой инструмент с помощью Python.
Вы узнаете:
* Как использовать библиотеку Pillow для создания изображений;
* Как применять Pygments для подсветки синтаксиса;
* Как объединить эти инструменты в удобный CLI-интерфейс.
Что такое Pygments?
Pygments — это популярный инструмент для подсветки синтаксиса. Он поддерживает множество языков программирования и умеет преобразовывать код в HTML, LaTeX, RTF и другие форматы.
Пример:
Это создаст PNG-файл с изображением кода.
Настройка внешнего вида
С помощью параметров
* Шрифт (
* Размер шрифта (
* Цветовую схему (
* Включение/отключение номеров строк.
Пример настройки:
Обработка входных данных
Для чтения кода из файла или stdin можно использовать модуль
Создание CLI-инструмента
Объединяя всё вместе, можно сделать простой CLI-скрипт, который принимает файл с кодом и генерирует изображение. В статье представлен полный пример кода.
Также рассматриваются вопросы производительности и расширения функциональности, например:
* Автоматическое определение языка;
* Поддержка разных форматов (JPEG, PNG);
* Сохранение и публикация изображений.
https://realpython.com/python-code-image-generator/
#python
👉 @python_real
Иногда вместо того, чтобы копировать и вставлять код, хочется поделиться красивым изображением с его фрагментом. Это особенно актуально для публикаций в соцсетях или документации. В этой статье рассматривается, как создать такой инструмент с помощью Python.
Вы узнаете:
* Как использовать библиотеку Pillow для создания изображений;
* Как применять Pygments для подсветки синтаксиса;
* Как объединить эти инструменты в удобный CLI-интерфейс.
Что такое Pygments?
Pygments — это популярный инструмент для подсветки синтаксиса. Он поддерживает множество языков программирования и умеет преобразовывать код в HTML, LaTeX, RTF и другие форматы.
Пример:
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import ImageFormatter
code = 'print("Hello, world!")'
with open("code.png", "wb") as f:
f.write(highlight(code, PythonLexer(), ImageFormatter()))
Это создаст PNG-файл с изображением кода.
Настройка внешнего вида
С помощью параметров
ImageFormatter
можно настраивать:* Шрифт (
font_name
);* Размер шрифта (
font_size
);* Цветовую схему (
style
);* Включение/отключение номеров строк.
Пример настройки:
formatter = ImageFormatter(
font_name="DejaVu Sans Mono",
font_size=14,
line_numbers=True,
style="monokai"
)
Обработка входных данных
Для чтения кода из файла или stdin можно использовать модуль
argparse
:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("source", nargs="?", type=argparse.FileType("r"), default=sys.stdin)
args = parser.parse_args()
code = args.source.read()
Создание CLI-инструмента
Объединяя всё вместе, можно сделать простой CLI-скрипт, который принимает файл с кодом и генерирует изображение. В статье представлен полный пример кода.
Также рассматриваются вопросы производительности и расширения функциональности, например:
* Автоматическое определение языка;
* Поддержка разных форматов (JPEG, PNG);
* Сохранение и публикация изображений.
https://realpython.com/python-code-image-generator/
#python
👉 @python_real
Улучшаем логирование в Python с Loguru
Встроенный модуль
🔹 Установка
🔹Простой пример
Loguru автоматически добавляет:
* временную метку,
* уровень лога,
* путь к файлу и номер строки,
* и форматирует вывод по умолчанию.
🔹Удаление стандартного логгера
По умолчанию Loguru добавляет логгер в
Здесь:
*
*
🔹Форматирование логов
Loguru позволяет настраивать формат:
Можно использовать кастомные форматеры и сериализацию в JSON.
🔹Перехват исключений
Loguru умеет автоматически логировать исключения:
Это логирует traceback без необходимости писать
🔹Интеграция со стандартным логированием
Можно перенаправить стандартный
🔹Заключение
Loguru — это мощная альтернатива стандартному модулю
https://realpython.com/python-loguru/
#python
👉 @python_real
Встроенный модуль
logging
в Python мощный, но довольно многословный и требует много шаблонного кода. Библиотека Loguru упрощает логирование, предлагая удобный и мощный API. Основные особенности и как начать использовать Loguru.
pip install loguru
🔹Простой пример
from loguru import logger
logger.debug("Отладочное сообщение")
logger.info("Информационное сообщение")
logger.success("Сообщение об успешной операции")
logger.warning("Предупреждение")
logger.error("Ошибка")
logger.critical("Критическая ошибка")
Loguru автоматически добавляет:
* временную метку,
* уровень лога,
* путь к файлу и номер строки,
* и форматирует вывод по умолчанию.
🔹Удаление стандартного логгера
По умолчанию Loguru добавляет логгер в
sys.stderr
. Можно удалить его и добавить свой:
logger.remove()
logger.add("file.log", rotation="1 MB", compression="zip")
Здесь:
*
rotation
— лог будет разбит на части при достижении 1 МБ,*
compression
— старые логи будут архивироваться в zip.🔹Форматирование логов
Loguru позволяет настраивать формат:
logger.add("log.txt", format="{time} {level} {message}", level="INFO")
Можно использовать кастомные форматеры и сериализацию в JSON.
🔹Перехват исключений
Loguru умеет автоматически логировать исключения:
@logger.catch
def divide(a, b):
return a / b
divide(1, 0)
Это логирует traceback без необходимости писать
try/except
.🔹Интеграция со стандартным логированием
Можно перенаправить стандартный
logging
в Loguru:
import logging
from loguru import logger
class InterceptHandler(logging.Handler):
def emit(self, record):
logger_opt = logger.opt(depth=6, exception=record.exc_info)
logger_opt.log(record.levelname, record.getMessage())
logging.basicConfig(handlers=[InterceptHandler()], level=0)
🔹Заключение
Loguru — это мощная альтернатива стандартному модулю
logging
, которая избавляет от шаблонного кода и делает логирование более выразительным и удобным. Особенно полезна для проектов, где читаемость и простота важны так же, как функциональность.https://realpython.com/python-loguru/
#python
👉 @python_real
Please open Telegram to view this post
VIEW IN TELEGRAM
15 мая(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqwE7pMi
Please open Telegram to view this post
VIEW IN TELEGRAM
📊 Группировка данных в Polars с помощью `groupby`
Polars — это высокопроизводительная библиотека для анализа данных на Python. Она особенно хороша при работе с большими объемами данных, благодаря своей колонко-ориентированной архитектуре и использованию Rust под капотом.
Одним из ключевых инструментов для агрегации и анализа данных является метод
Основы
Пример базовой группировки:
Группировка по нескольким колонкам
Можно сгруппировать по нескольким признакам:
Использование выражений
Polars поддерживает ленивое выполнение (lazy evaluation) и мощную систему выражений:
Методы
Для работы с большими данными предпочтительно использовать ленивый режим:
Для запуска вычислений используется
Применение
Эти методы полезны при работе с временными рядами:
*
*
Пример:
https://realpython.com/polars-groupby/
#python
👉 @python_real
Polars — это высокопроизводительная библиотека для анализа данных на Python. Она особенно хороша при работе с большими объемами данных, благодаря своей колонко-ориентированной архитектуре и использованию Rust под капотом.
Одним из ключевых инструментов для агрегации и анализа данных является метод
.groupby()
.Основы
.groupby()
Пример базовой группировки:
import polars as pl
df = pl.DataFrame({
"city": ["London", "London", "Oslo", "Oslo", "Berlin", "Berlin"],
"year": [2020, 2021, 2020, 2021, 2020, 2021],
"value": [100, 150, 200, 220, 50, 80],
})
result = df.groupby("city").agg([
pl.col("value").mean().alias("average_value")
])
print(result)
Группировка по нескольким колонкам
Можно сгруппировать по нескольким признакам:
df.groupby(["city", "year"]).agg([
pl.col("value").sum().alias("total_value")
])
Использование выражений
Polars поддерживает ленивое выполнение (lazy evaluation) и мощную систему выражений:
df.groupby("city").agg([
(pl.col("value") * 2).mean().alias("double_avg")
])
Методы
.groupby()
в ленивом APIДля работы с большими данными предпочтительно использовать ленивый режим:
df_lazy = df.lazy()
result = df_lazy.groupby("city").agg([
pl.col("value").sum().alias("total")
])
Для запуска вычислений используется
.collect()
:
result.collect()
Применение
.groupby_dynamic()
и .groupby_rolling()
Эти методы полезны при работе с временными рядами:
*
groupby_dynamic
: для агрегирования по фиксированным временным интервалам (например, по дням, неделям).*
groupby_rolling
: для скользящего окна (например, скользящее среднее за 7 дней).Пример:
df = pl.DataFrame({
"timestamp": pl.date_range(low=datetime(2022,1,1), high=datetime(2022,1,10), interval="1d"),
"value": range(10)
})
df.groupby_rolling(index_column="timestamp", period="3d").agg([
pl.col("value").mean().alias("rolling_avg")
])
https://realpython.com/polars-groupby/
#python
👉 @python_real
22 мая(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Собес проведет Вадим Пуштаев, ex. head of backend в
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqwMMTcQ
Please open Telegram to view this post
VIEW IN TELEGRAM
Вложенные циклы в Python
Вложенные циклы позволяют размещать один цикл внутри другого и тем самым выполнять повторяющиеся действия над несколькими последовательностями. Понимание этой концепции помогает писать более эффективный код, управлять сложными структурами данных и избегать проблем с читабельностью и производительностью.
Начало работы с вложенными циклами
В Python есть два основных типа циклов —
*
*
Вложенный цикл создаётся размещением одного цикла внутри другого:
Для каждой итерации внешнего цикла внутренний выполняется полностью.
Аналогия: часовая и минутная стрелки часов. Часовая проходит круг за 12 часов, минутная — за 1 час, но работают они совместно.
Практические примеры
Печать шаблонов
Таблица умножения
Суммирование элементов во вложенных списках
Парные комбинации без самих себя
Вложенный
Частые проблемы вложенных циклов
* Область видимости переменных. Не используйте одинаковые имена во внешнем и внутреннем циклах.
* Читаемость. Глубокая вложенность усложняет понимание кода.
* Производительность. Каждый дополнительный уровень увеличивает временную сложность (часто до
Оптимизация
*
* List Comprehension делает выражения компактнее, хотя не всегда улучшает производительность.
Вывод
Вложенные циклы — мощный инструмент для работы с многомерными данными и повторяющимися задачами. Однако злоупотребление ими ухудшает читаемость и скорость. Используйте их осознанно, оптимизируйте при помощи
https://realpython.com/nested-loops-python/
#python
👉 @python_real
Вложенные циклы позволяют размещать один цикл внутри другого и тем самым выполнять повторяющиеся действия над несколькими последовательностями. Понимание этой концепции помогает писать более эффективный код, управлять сложными структурами данных и избегать проблем с читабельностью и производительностью.
Начало работы с вложенными циклами
В Python есть два основных типа циклов —
for
и while
.*
for
-цикл проходит по элементам последовательности (списка, диапазона и т. д.), когда количество итераций известно заранее.*
while
-цикл выполняется, пока истинно заданное условие, и полезен, когда число итераций заранее не определено.Вложенный цикл создаётся размещением одного цикла внутри другого:
for outer_variable in outer_iterable:
for inner_variable in inner_iterable:
<body>
Для каждой итерации внешнего цикла внутренний выполняется полностью.
Аналогия: часовая и минутная стрелки часов. Часовая проходит круг за 12 часов, минутная — за 1 час, но работают они совместно.
for hour in range(24):
for minute in range(60):
print(f"{hour:02d}:{minute:02d}")
Практические примеры
Печать шаблонов
height = 6
sail_patterns = "*#-x+o"
for row in range(height):
pattern = ""
spacing = " " * (height - row)
for symbol in sail_patterns:
pattern += symbol * row + spacing
print(pattern)
Таблица умножения
for multiplicant in range(1, 11):
for multiplier in range(1, 4):
expression = f"{multiplicant:>2d} × {multiplier}"
product = multiplicant * multiplier
print(f"{expression} = {product:>2d}", end="\t")
print()
Суммирование элементов во вложенных списках
resource_donators = [
[8, 6, 3],
[9, 2, 7],
[4, 1, 5]
]
total_resources = 0
for planet in resource_donators:
for resource in planet:
total_resources += resource
print(total_resources) # 45
Парные комбинации без самих себя
players = ["Bonnie", "Mike", "Raj", "Adah"]
for player1 in players:
for player2 in players:
if player1 != player2:
print(f"{player1} vs {player2}")
Вложенный
while
while True:
word = input("Введите слово (exit — для выхода): ")
if word == "exit":
break
for letter in word:
print(letter)
Частые проблемы вложенных циклов
* Область видимости переменных. Не используйте одинаковые имена во внешнем и внутреннем циклах.
* Читаемость. Глубокая вложенность усложняет понимание кода.
* Производительность. Каждый дополнительный уровень увеличивает временную сложность (часто до
O(n²)
и выше).Оптимизация
*
break
и continue
позволяют досрочно завершать цикл или пропускать ненужные итерации.* List Comprehension делает выражения компактнее, хотя не всегда улучшает производительность.
# Поиск "bacon" с break
for layer in blt_sandwich:
for ingredient in layer:
if ingredient == target:
print("Found bacon!")
break
if target in layer:
break
Вывод
Вложенные циклы — мощный инструмент для работы с многомерными данными и повторяющимися задачами. Однако злоупотребление ими ухудшает читаемость и скорость. Используйте их осознанно, оптимизируйте при помощи
break
, continue
и list comprehension, и никогда не забывайте о сложности алгоритма.https://realpython.com/nested-loops-python/
#python
👉 @python_real
🚀 Открой для себя идеальный путь к лидерству с карьерным тестом от ОЭЗ «Алабуга»! 🌟
Мечтаете о карьере в крупной компании, где ваш потенциал раскроется на полную? Наш тест поможет вам определить вашу уникальную лидерскую роль. Может быть, именно вы станете тем лидером, который выведет команду на новый уровень?
После прохождения теста вы можете заполнить заявку и получить приглашение на эксклюзивную лидерскую программу. Участие в программе открывает реальные перспективы трудоустройства в ОЭЗ «Алабуга», предоставляя шанс начать путь к профессиональному признанию.
Сделайте первый шаг к своему будущему сегодня! Пройдите тест, подайте заявку и начните строить свою карьеру вместе с нами. 🎯
Мечтаете о карьере в крупной компании, где ваш потенциал раскроется на полную? Наш тест поможет вам определить вашу уникальную лидерскую роль. Может быть, именно вы станете тем лидером, который выведет команду на новый уровень?
После прохождения теста вы можете заполнить заявку и получить приглашение на эксклюзивную лидерскую программу. Участие в программе открывает реальные перспективы трудоустройства в ОЭЗ «Алабуга», предоставляя шанс начать путь к профессиональному признанию.
Сделайте первый шаг к своему будущему сегодня! Пройдите тест, подайте заявку и начните строить свою карьеру вместе с нами. 🎯