Реальный Python
3.78K subscribers
801 photos
10 videos
7 files
848 links
Все о пайтон, новости, подборки на русском и английском. По всем вопросам @evgenycarter
Download Telegram
🐍 Операторы Python `in` и `not in`: проверка на принадлежность

Знаете ли вы, что в Python есть оператор, который делает код чище и удобнее? Это оператор in! 🎯

👉 Что он делает?
Оператор in проверяет, содержится ли элемент в последовательности (списке, строке, кортеже) или ключ в словаре. Возвращает True, если находит, и False, если нет.

Примеры использования:
1️⃣ Проверка элемента в списке:

"a" in ["a", "b", "c"] # True


2️⃣ Поиск подстроки в строке:

"hello" in "hello world" # True


3️⃣ Проверка ключа в словаре:

"key" in {"key": "value"} # True


💡 Особенности:
- Работает с любыми итерируемыми объектами.
- Для пользовательских классов можно добавить поддержку in, реализовав метод __contains__.

Эффективность:
- Для списков и строк: O(n) (линейная сложность).
- Для множеств (set) и словарей (dict): O(1) (почти мгновенно, благодаря хэш-таблицам).

🔍 Альтернативы:
- Для строк: методы str.find() или str.index().
- Для обработки исключений: try и except.

Оператор in — это не только удобно, но и читаемо! Используйте его, чтобы писать лаконичный и понятный код. 😉

https://realpython.com/python-in-operator/

#python

👉 @python_real
📜 Python: Списки vs Кортежи — в чем разница?

Статья на Real Python рассказывает о двух основных структурах данных в Python: списках (`list`) и кортежах (tuple). Вот ключевые моменты:

📌 Списки (list):
- Изменяемые: можно добавлять, удалять и изменять элементы.
- Используются для хранения коллекций, которые могут меняться.
- Пример:

my_list = [1, 2, 3]
my_list.append(4) # [1, 2, 3, 4]


📌 Кортежи (tuple):
- Неизменяемые: после создания элементы нельзя изменить.
- Используются для хранения константных данных.
- Пример:

my_tuple = (1, 2, 3)
# my_tuple[0] = 10 # Ошибка! Кортежи неизменяемы.


🔍 Когда что использовать?
- Списки: когда данные могут изменяться (например, список задач).
- Кортежи: когда данные должны оставаться постоянными (например, координаты точки).


Производительность:
- Кортежи работают быстрее списков, так как они неизменяемы и занимают меньше памяти.


Используйте списки и кортежи с умом, чтобы писать эффективный и читаемый код! 🚀

https://realpython.com/python-lists-tuples/

#python

👉 @python_real
Цикл for в Python: разбор возможностей

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

🔹 Основные возможности:
Простая итерация

for num in [1, 2, 3, 4, 5]:
print(num)

Выведет числа от 1 до 5.

Использование range()

for i in range(5): # Эквивалентно range(0, 5)
print(i)

Выведет 0, 1, 2, 3, 4.

Перебор строки

for char in "Python":
print(char)

Выведет символы P, y, t, h, o, n.

Перебор словаря

data = {"name": "Alice", "age": 25}
for key, value in data.items():
print(f"{key}: {value}")

Выведет:

name: Alice
age: 25


Использование enumerate() для индексов

words = ["apple", "banana", "cherry"]
for index, word in enumerate(words):
print(index, word)

Выведет:

0 apple
1 banana
2 cherry


Цикл for с else

for i in range(3):
print(i)
else:
print("Цикл завершен!")

Если break не был вызван, else выполнится после окончания цикла.

https://realpython.com/python-for-loop/

#python

👉 @python_real
Python и API: выигрышное сочетание для чтения общедоступных данных

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

https://realpython.com/python-api/

#python

👉 @python_real
Как использовать pyproject.toml в Python

Рассматриваются основные аспекты работы с этим файлом, его структура и как он помогает в управлении зависимостями, настройке инструментов и организации проектов.

Краткий обзор:
- pyproject.toml появился в PEP 518 и стал стандартом для описания конфигурации Python-проектов.
- Позволяет определять сборщики (build backends), такие как setuptools или poetry.
- Упрощает настройку инструментов вроде black, mypy и pytest.
- Дает возможность управлять зависимостями и версиями пакетов.

Использование pyproject.toml делает проекты более структурированными и гибкими, особенно при работе с различными инструментами и системами сборки.

https://realpython.com/python-pyproject-toml/

#python

👉 @python_real
Создаем веб-приложения с Dash на Python

Хотите быстро создать интерактивные веб-приложения на Python? Библиотека Dash позволяет легко строить дашборды и визуализации без глубоких знаний веб-разработки. В статье рассматриваются основы работы с Dash, создание пользовательского интерфейса и управление состоянием приложения.

📌 Основные моменты:
🔹 Установка и настройка Dash
🔹 Создание интерактивных графиков с Plotly
🔹 Управление входными данными и callback-функциями
🔹 Развертывание приложения

Отличный инструмент для анализа данных и визуализации в реальном времени!

https://realpython.com/python-dash/

#python

👉 @python_real
Обработка естественного языка с помощью spaCy в Python

Этот гайд подробно объясняет, как использовать библиотеку spaCy для обработки естественного языка (NLP) в Python. В статье рассматриваются основы работы со spaCy, включая:

- Установку и загрузку моделей языка
- Токенизацию текста
- Лемматизацию и определение частей речи
- Распознавание именованных сущностей (NER)
- Работа с зависимостями в предложении
- Создание пользовательских обработчиков для текста

https://realpython.com/natural-language-processing-spacy-python/

#python

👉 @python_real
Объекты bytes: обработка бинарных данных в Python

- Основы бинарных данных: понятия битов, байтов, двоичных слов, порядков байтов (эндиянность) и знаковости.

- Объект bytes в Python: различия между bytes и bytearray, а также концепция байтоподобных объектов и протокола буфера.

- Создание объектов bytes: использование литералов байтов, функции bytes() и метода класса bytes.fromhex().

- Манипуляции с объектами bytes: операции, схожие со строками, преобразование между байтами и строками, а также различные способы представления байтов.

- Практическое применение: чтение и запись бинарных файлов, сетевые коммуникации, сериализация объектов, работа с изображениями и выполнение байт-кода Python.

Статья предоставляет глубокое понимание того, как эффективно работать с бинарными данными в Python, и содержит практические примеры для закрепления материала.


https://realpython.com/python-bytes/

#python

👉 @python_real
Как работать с Polars LazyFrames

Подробный туториал о работе с 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
LangGraph: Создание AI-агентов с сохранением состояния на Python

Эта статья рассказывает о 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
О векторных базах данных простым языком

Представьте, что управляете онлайн-магазином, предлагающим тысячи товаров.

Чтобы помочь пользователям находить нужные позиции, вы добавили строку поиска. Теперь посетители могут вводить интересующие их запросы, на что вы будете показывать им подходящие результаты.

Например, когда пользователь вводит «лето», вы можете показывать предметы вроде шортов, платьев, панам и пляжных зонтов.

Как бы вы реализовали такую систему?

https://getdeploying.com/guides/vector-databases

#python

👉 @python_real
Методы экземпляра, класса и статические методы в Python — просто о сложном

В 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
Представляем DuckDB

Если вы работаете с анализом данных в 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
🧼 Методы 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.

🔍 Основные моменты:
= не копирует объект, а лишь создаёт новую ссылку на него.
• Поверхностное копирование (copy.copy()) создаёт новый объект, но вложенные объекты остаются общими.
• Глубокое копирование (copy.deepcopy()) рекурсивно копирует все вложенные объекты, обеспечивая полную независимость.
• Для пользовательских классов можно определить методы _copy_() и _deepcopy_() для контроля процесса копирования.

https://realpython.com/python-copy/

#python

👉 @python_real
🔹 Что такое пространства имён в Python?

В Python пространство имён — это система, которая обеспечивает уникальные имена для всех объектов, таких как переменные и функции. Простыми словами, это своего рода словарь, в котором имена являются ключами, а объекты — значениями.

Существует несколько типов пространств имён:
- Локальные: существуют внутри функции.
- Глобальные: существуют на уровне модуля.
- Встроенные: предоставляются Python по умолчанию (например, len() и print()).

Python управляет этими пространствами имён с помощью LEGB-правила:
- Local — локальное пространство имён.
- Enclosing — пространство имён замыкающей функции.
- Global — глобальное пространство имён.
- Built-in — встроенное пространство имён.

Когда интерпретатор встречает имя, он ищет его именно в таком порядке.

Понимание пространств имён помогает избежать неожиданных ошибок и писать более чистый код!


https://realpython.com/python-namespace/

#python

👉 @python_real