Реальный Python
3.82K subscribers
818 photos
10 videos
7 files
866 links
Все о пайтон, новости, подборки на русском и английском. По всем вопросам @evgenycarter
Download Telegram
🧠 Как копировать объекты в Python правильно?

📌 Статья объясняет разницу между поверхностным и глубоким копированием объектов в Python.

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

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

#python

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

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

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

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

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

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


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

#python

👉 @python_real
👍4
Генератор изображений кода на Python: делитесь кодом со стилем

Иногда вместо того, чтобы копировать и вставлять код, хочется поделиться красивым изображением с его фрагментом. Это особенно актуально для публикаций в соцсетях или документации. В этой статье рассматривается, как создать такой инструмент с помощью 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
👍4
Улучшаем логирование в Python с Loguru

Встроенный модуль 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
👍51