Реальный Python
3.73K subscribers
823 photos
10 videos
7 files
873 links
Все о пайтон, новости, подборки на русском и английском. По всем вопросам @evgenycarter
Download Telegram
🐍 Что нового в Python 3.14

Python 3.14 принес кучу интересных обновлений, которые делают язык ещё мощнее и удобнее для разработчиков. Вот краткий обзор:

🔹 Новый модуль tomllib — теперь можно парсить TOML прямо из стандартной библиотеки без сторонних зависимостей.
🔹 Оптимизации скорости — Python продолжает становиться быстрее. Улучшения в байткоде и оптимизация работы с коллекциями дают заметный прирост производительности.
🔹 Новые возможности аннотаций типов — улучшена работа с типами TypeAliasType, а также добавлены новые инструменты для статического анализа.
🔹 Расширения для pattern matching — теперь можно использовать ещё более гибкие шаблоны, особенно для сложных структур данных.
🔹 Изменения в работе GIL — продолжается подготовка к многопоточному Python без GIL в будущем.

https://realpython.com/python314-new-features/

#python

👉 @python_real
👍41👏1😁1🆒1
Шахматы, которые вас удивят: Полный гайд по созданию игры с туманом войны на Python

Всё началось с подготовки к финалу RuCode – масштабному соревнованию для всех увлечённых алгоритмическим программированием. Погружаясь в разбор заданий прошлых лет, мне кое-что совершенно случайно попало в руки, интересная задача: реализовать шахматы с "туманом войны" в консоли

Идея показалась мне настолько вдохновляющей, что я решил пойти дальше, а что если превратить эту консольную головоломку в настоящую игру с графикой и той самой атмосферой тумана войны, который так знаком игрокам в стратегиях

Идея зацепила сразу, представьте классические шахматы, но с элементом неожиданности. Вы не видите все фигуры противника, а только те клетки, куда могут ступить ваши фигуры. Каждый ход превращается в тактическую загадку, что скрывается в темноте? Где спрятался вражеский ферзь? и т.д.

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

https://habr.com/ru/articles/958560/

#python

👉 @python_real
👍4🔥1🤔1
Короче, ищем менторов — Senior Python-разработчиков

Ищем в ШОРТКАТ — менторскую платформу от команды разработчиков из бигтеха. Мы помогаем найти крутую работу, апнуть грейд или сменить стек.

Что надо будет делать: проводить тестовые собесы → оценивать грейд → помогать разбираться в сложных темах.

Что взамен:
- От 40К за 5-7 часов работы в неделю
- Доступ к обучению и комьюнити сильных менторов из Яндекс, Uber, VK, Сбер
- Возможность выступать на эфирах, куда уже приходят 500+ разработчиков, и стать заметнее на рынке

Заполняй форму — свяжемся и расскажем подробности
➡️https://tally.so/r/mD602X


Реклама.
О рекламодателе.
👍1🤮1
YAML: The Missing Battery in Python

YAML (YAML Ain’t Markup Language) - это человекочитаемый формат сериализации данных, который часто используется для файлов конфигураций, обмена данными между языками и управления инфраструктурой (например, в Docker, Kubernetes и т. д.).

В Python с YAML удобно работать с помощью библиотеки PyYAML. Она позволяет:

- читать YAML-файлы и преобразовывать их в стандартные Python-объекты (dict, list, str, и т. д.);
- записывать данные обратно в YAML;
- безопасно загружать данные с помощью safe_load() (чтобы избежать выполнения произвольного кода);
- использовать настраиваемые объекты и теги для сериализации нестандартных типов.

Пример загрузки YAML-файла:


import yaml

with open("config.yaml", "r") as f:
config = yaml.safe_load(f)

print(config)


Пример записи:


import yaml

data = {"name": "Oleg", "skills": ["Python", "AI", "ML"]}

with open("output.yaml", "w") as f:
yaml.dump(data, f)


Также PyYAML поддерживает:

- настройку форматирования вывода (default_flow_style=False, indent и т. д.),
- пользовательские конструкторы и представления (add_constructor, add_representer),
- и интеграцию с другими инструментами DevOps.

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

#python

👉 @python_real
👍3
🚀 Подборка Telegram каналов для программистов

Системное администрирование, DevOps 📌
https://t.me/bash_srv Bash Советы
https://t.me/win_sysadmin Системный Администратор Windows
https://t.me/sysadmin_girl Девочка Сисадмин
https://t.me/srv_admin_linux Админские угодья
https://t.me/linux_srv Типичный Сисадмин
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/linux_odmin Linux: Системный администратор
https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux

1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://t.me/DevLab1C 1С:Предприятие 8
https://t.me/razrab_1C 1C Разработчик
https://t.me/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://t.me/rabota1C_rus Вакансии для программистов 1С

Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
https://t.me/pythonofff Python академия.
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python

Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах

GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
https://t.me/androidspb Разработка под Android: Kotlin, Java.

Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
https://t.me/game_devv Все о разработке игр

Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов

БигДата, машинное обучение 📌
https://t.me/bigdata_1 Big Data, Machine Learning

Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
https://t.me/lifeproger Жизнь программиста. Авторский канал.

QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика

Шутки программистов 📌
https://t.me/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_2 Хакер Free

Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров

Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
https://t.me/matgeoru Математика | Геометрия | Логика

Excel лайфхак📌
https://t.me/Excel_lifehack

https://t.me/mir_teh Мир технологий (Technology World)

Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
🧼 Методы 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
👍4
Python MarkItDown: преобразование документов в Markdown для LLM

Библиотека MarkItDown позволяет быстро преобразовывать PDF, файлы Office, изображения, HTML, аудио и URL в Markdown, готовый для использования в языковых моделях (LLM). В этом руководстве вы сравните MarkItDown с Pandoc, запустите его из командной строки, используете в Python-коде и встроите конвертацию в рабочие процессы с ИИ.

По завершении урока вы поймёте следующее:

- MarkItDown можно установить через pip, используя спецификатор [all], чтобы подтянуть необязательные зависимости.
- В командной версии (CLI) результат можно сохранить в файл с помощью опции -o или --output, указав путь назначения.
- Метод .convert() читает входной документ и преобразует его в Markdown.
- Сервер MCP MarkItDown можно подключать к клиентам вроде Claude Desktop, чтобы выполнять конвертацию по запросу прямо в чате.
- MarkItDown может интегрироваться с LLM для генерации описаний изображений и извлечения текста с помощью OCR и пользовательских промптов.

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

#python

👉 @python_real
2👍1
Основы работы с декораторами Python

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

https://realpython.com/primer-on-python-decorators/

#python

👉 @python_real
👍2
Python calendar Module: Создание календарей с помощью Python

Python calendar module предоставляет несколько способов создания календарей для Python-программ. Он также включает в себя множество функций для работы с данными календаря в виде строк, чисел и объектов времени даты.

В этом уроке вы узнаете, как использовать модуль calendar для создания и настройки календарей в Python.

https://realpython.com/python-calendar-module/

#python

👉 @python_real
👍21
Установка и выполнение приложений Python с использованием pipx

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

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

👉 @python_real
👍2
Практичные Python-привычки, которые реально повышают качество кода

1. Явное состояние и мемоизация
Скрытые состояния в замыканиях и декораторах часто приводят к трудноуловимым багам.


from functools import wraps

def memoize(func):
cache = {}
@wraps(func)
def wrapper(*args):
if args not in cache:
cache[args] = func(*args)
return cache[args]
return wrapper


Использование @wraps сохраняет имя функции, docstring и метаданные — критично для дебага и интеграции с Flask.

2. Асинхронность для продакшн
Асинхронность часто ухудшает код, если использовать её неправильно.


import asyncio, aiohttp

TOTAL_REQUESTS = 1_000_000
sem = asyncio.Semaphore(1000)

async def fetch(session, url):
async with sem:
try:
async with session.get(url) as resp:
return await resp.text()
except aiohttp.ClientError:
return None

async def main():
urls = [f"https://api.site/{i}" for i in range(TOTAL_REQUESTS)]
async with aiohttp.ClientSession() as session:
for i in range(0, len(urls), 10_000):
chunk = urls[i:i+10_000]
tasks = [fetch(session, url) for url in chunk]
await asyncio.gather(*tasks)


Контроль через Semaphore + чанки предотвращает OOM и блокировки API. Используйте create_task() для управления жизненным циклом корутин.

3. Ошибки и raise
Не ловите всё подряд и используйте новые возможности языка.


# Python 3.11+
user.is_admin or raise PermissionError("Not allowed!")


raise как выражение и except* (Python 3.11) делают обработку ошибок лаконичной и безопасной:


# Python 3.11+
try:
await asyncio.gather(fail1(), fail2())
except* ValueError as ve: # Только ValueError
print(f"ValueErrors: {ve.exceptions}")
except* TypeError as te: # Только TypeError
print(f"TypeErrors: {te.exceptions}")


4. Типизация и валидация

from pydantic import validate_call
from typing import Annotated
from pydantic.types import Gt, Ge, Le

@validate_call
def calculate_discount(
price: Annotated[float, Gt(0)],
discount: Annotated[float, Ge(0), Le(100)]
) -> float:
return price * (1 - discount / 100)


Constraints прямо в аннотациях делают сигнатуры самодокументируемыми и безопасными без дублирования проверок.

5. Ленивая загрузка и кеширование
@cached_property и functools.cache экономят время при дорогих вычислениях.

from functools import cached_property
import time

class UserReport:
def __init__(self, user_id):
self.user_id = user_id
@cached_property
def total_spent(self):
print("Querying database...")
time.sleep(2) # expensive call
return 199.99

r = UserReport(123)
print(r.total_spent) # computed once
print(r.total_spent) # cached instantly
del r.__dict__["total_spent"]
print(r.total_spent) # recomputed after cache reset


Результат хранится в dict объекта, можно сбросить при необходимости. Отлично подходит для API-запросов и конфигураций.

6. Python 3.14+
Новые возможности языка ускоряют работу и упрощают код:

uuid7() — уникальные и сортируемые по времени ключи

ContextVar как контекстный менеджер

t-strings (t"...") для отложенных шаблонов

subTests для granular тестирования


from string.templatelib import Template

def render(template: Template):
parts = []
for item in template:
if isinstance(item, str):
parts.append(item)
else:
parts.append(item.value)
return "".join(parts)

user = "Alice"
role = "admin"
t = t"user: {user} — role: {role}"
s = render(t)


Жалко что не добавили .format() для t -строк

Заключение
Даже небольшие изменения в подходе к разработке дают ощутимый эффект на качество кода и скорость разработки.

👉 @python_real
👍2
🐍 SOLID принципы в Python: Фундамент чистого кода

Хотите писать код, который легко поддерживать, тестировать и масштабировать? Тогда вам точно стоит внедрить в свои проекты принципы SOLID. Это «золотой стандарт» объектно-ориентированного программирования, который отлично ложится и на Python.

🔹 S - Single Responsibility (Принцип единственной ответственности)
У класса должна быть только одна причина для изменения. Не делайте «божественные объекты», которые умеют всё. Разделяйте логику: один класс управляет файлами, другой - сжимает их в zip.

🔹 O - Open-Closed (Принцип открытости/закрытости)
Сущности (классы, модули) должны быть открыты для расширения, но закрыты для модификации. Хотите добавить новую фигуру? Не переписывайте старый класс, а создайте новый, наследуясь от абстракции.

🔹 L - Liskov Substitution (Принцип подстановки Барбары Лисков)
Объекты подклассов должны заменять объекты родительских классов без поломки кода. Если Square наследуется от Rectangle, он должен вести себя как прямоугольник во всех ситуациях (спойлер: это часто вызывает проблемы).

🔹 I - Interface Segregation (Принцип разделения интерфейса)
Клиенты не должны зависеть от методов, которые они не используют. В Python это решается через создание узкоспециализированных абстрактных классов или протоколов (Protocols), вместо одного огромного интерфейса.

🔹 D - Dependency Inversion (Принцип инверсии зависимостей)
Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба должны зависеть от абстракций. Используйте dependency injection, чтобы код был гибким.

👉 Читать полный гайд с примерами рефакторинга: https://realpython.com/solid-principles-python/

👉 @python_real
👍2
🦙 LlamaIndex: Ваш персональный мост между данными и LLM

Многие думают, что для работы нейросети с вашими личными документами нужно заниматься сложным «файнтюнингом». На самом деле, чаще всего достаточно RAG (Retrieval-Augmented Generation). И здесь королем выступает LlamaIndex.

Что это такое?

Если LangChain это швейцарский нож для любых задач с цепочками действий, то LlamaIndex специализируется именно на данных. Он берет ваши PDF, базы данных или заметки из Notion и превращает их в формат, который «понимает» LLM (например, GPT-4).

Ключевые возможности из свежего гайда:

🔹Data Connectors: Загрузка данных из 100+ источников (Slack, Google Drive, Postgres и т.д.).
🔹Indexing: Разбиение текста на умные фрагменты (nodes) и создание векторных индексов для быстрого поиска.
🔹Query Engine: Интерфейс, который позволяет «общаться» со своими данными на естественном языке.

Мини-пример кода:

Всего несколько строк, чтобы заставить модель отвечать по вашему локальному файлу:


from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

# 1. Загружаем документы из папки
documents = SimpleDirectoryReader("./data").load_data()

# 2. Создаем индекс (автоматически эмбеддинги и хранение)
index = VectorStoreIndex.from_documents(documents)

# 3. Задаем вопрос
query_engine = index.as_query_engine()
response = query_engine.query("В чем основная мысль отчета за квартал?")
print(response)



Почему стоит попробовать?

1. Актуальность: Модель не будет галлюцинировать, если ответ есть в ваших документах.
2. Экономия: Не нужно переобучать модель - достаточно обновить индекс.
3. Гибкость: Поддерживает как простые скрипты, так и сложные enterprise-архитектуры.


📖 Полный разбор с примерами: https://realpython.com/llamaindex-examples/

#python #llm #llamaindex #ai #rag

👉 @python_real
👍4
🐍 Python Deque: Когда обычного списка недостаточно

Многие используют стандартный list для любых задач, связанных с хранением последовательностей. Но что, если вам нужно эффективно добавлять или удалять элементы с обоих концов структуры?

Здесь на сцену выходит collections.deque (double-ended queue).

🚀 Почему Deque круче списка в определенных задачах?

Главная проблема list в том, что он оптимизирован для операций с правой стороны. Удаление или вставка в начало списка (list.insert(0, v) или list.pop(0)) заставляет Python сдвигать все остальные элементы, что дает сложность .

deque обеспечивает:

🔹O(1) для операций добавления/удаления как слева, так и справа.
🔹Возможность создания кольцевых буферов (ограниченных очередей).
🔹Потокобезопасность для атомарных операций добавления/удаления.

🛠 Примеры использования


from collections import deque

# 1. Создаем дек
d = deque(['middle'])

# 2. Добавляем элементы с двух сторон
d.append('right') # в конец
d.appendleft('left') # в начало
print(d) # deque(['left', 'middle', 'right'])

# 3. Удаляем элементы
d.pop()
d.popleft()

# 4. Ограниченная очередь (самое полезное!)
# Хранит только последние 3 элемента. Идеально для логов или истории.
history = deque(maxlen=3)
for i in range(5):
history.append(f"Action {i}")
print(history)
# Результат: всегда только последние 3 действия



💡 Когда стоит использовать deque?

🔹Реализация очередей (FIFO) и стеков (LIFO).
🔹Алгоритмы обхода графов (BFS - поиск в ширину).
🔹Хранение последних логов или сообщений.

Важный нюанс: Доступ к элементам по индексу в середине дека (d[n]) работает медленнее (O(n)), чем в списке (O(1)). Если вам нужен частый произвольный доступ - оставайтесь на list.


📖 Подробнее в статье: https://realpython.com/python-deque/

#python #tips #collections #backend

👉 @python_real
👍5
🐍 Создаем классическую «Змейку» на Python за 15 минут!

Помните те времена, когда мы часами залипали в «Змейку» на старых Nokia? Самое крутое, что механику этой легендарной игры можно воссоздать на Python, используя библиотеку pygame.

Это отличный проект для тех, кто хочет подтянуть навыки работы с игровыми циклами, обработкой событий и координатной сеткой.

🛠 Что внутри проекта?

1. Игровое поле: Создаем окно и задаем цвета.
2. Змейка: Представляем её как список координат блоков.
3. Логика движения: Обрабатываем нажатия клавиш (вверх, вниз, влево, вправо).
4. Еда и рост: Генерируем «яблоки» в случайных местах и увеличиваем длину змейки при поедании.
5. Game Over: Условия столкновения со стенами или собственным хвостом.

💻 Кусочек кода для старта:


import pygame
import time

# Инициализация
pygame.init()
white = (255, 255, 255)
snake_speed = 15

# Основной цикл игры
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
# Тут происходит вся магия движения...




В статье подробно разобрано, как собрать всё воедино, настроить экран проигрыша и добавить счетчик очков.

📖 Подробнее: https://towardsdatascience.com/implementing-the-snake-game-in-python/

#python #pygame #coding #gameloop #tutorial

👉 @python_real
🍾2👍1
🔴 Реальный собес на Python от ТехЛида с опытом работы в Авито и Яндексе в прямом эфире

17 февраля(уже завтра!) в 19:00 по мск приходи на прямой эфир с реальным собеседованием на Middle разработчика.

Почему точно нужно прийти:
📂 Савва Демиденко, ТехЛид с опытом в Яндексе и Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Савва будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Савве

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир →
@shortcut_py_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🚀 Подборка полезных IT каналов в Max


Системное администрирование, DevOps 📌

https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.

1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика

Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика

Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика

GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных

Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков

Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов

Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻

Шутки программистов 📌
https://max.ru/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free

Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров

Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике

Вакансии 📌
https://max.ru/progjob Вакансии в IT

Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных


Бонус 📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
👎3👍2
🚀 Pydantic AI: Создаем типобезопасных LLM-агентов на Python

Если вы устали писать костыли для парсинга сырого текста от LLM, этот инструмент решает проблему изящно: вы задаете схемы через BaseModel, а фреймворк сам берет на себя общение с нейросетью, валидацию и ретраи при ошибках формата.

Что разбирается в статье:
Структурированный вывод: Как заставить агента возвращать строго типизированные объекты вместо "простыни" текста.

Использование инструментов (Tool Calling): Как с помощью простого декоратора @agent.tool научить LLM вызывать ваши Python-функции (например, для запросов к API или БД).

Dependency Injection: Безопасный проброс контекста (сессий БД, настроек) в агенты и инструменты с проверкой типов через RunContext.

Подводные камни: Честный разбор ограничений - как ретраи влияют на расход токенов, стоимость API и почему для масштабных проектов с кучей готовых интеграций всё еще может понадобиться LangChain или LlamaIndex.

Кому будет полезно?
Всем, кто хочет быстро прототипировать ИИ-фичи с минимальным количеством бойлерплейта и максимальным контролем над типами данных.

🔗 Читать туториал полностью: https://realpython.com/pydantic-ai/

#python #pydantic #llm #ai #development #realpython

👉 @python_real
1👍1
Вложенные циклы в Python

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

Начало работы с вложенными циклами

В 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
👍21
🚀 Подборка полезных IT каналов в Max


Системное администрирование, DevOps 📌

https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин

1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌

https://max.ru/cpp_lib Библиотека C/C++ разработчика

Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика

Программирование React📌
https://max.ru/react_lib React

Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика

Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика

GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных

Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков

Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов

Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻

Шутки программистов 📌
https://max.ru/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free

Книги, статьи для дизайнеров 📌

https://max.ru/odesigners Статьи, книги для дизайнеров

Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике

Вакансии 📌
https://max.ru/progjob Вакансии в IT

Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных


Бонус 📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
👎1