🧠 Как копировать объекты в 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
👍4
🔹 Что такое пространства имён в 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
👍4
Генератор изображений кода на 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
👍4
Улучшаем логирование в 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
👍5❤1