ch
Feedback
Реальный Python

Реальный Python

前往频道在 Telegram

Все о пайтон, новости, подборки на русском и английском. По всем вопросам @evgenycarter

显示更多
3 654
订阅者
-124 小时
-27
-1530
帖子存档
Шахматы, которые вас удивят: Полный гайд по созданию игры с туманом войны на Python Всё началось с подготовки к финалу RuCode
Шахматы, которые вас удивят: Полный гайд по созданию игры с туманом войны на Python Всё началось с подготовки к финалу RuCode – масштабному соревнованию для всех увлечённых алгоритмическим программированием. Погружаясь в разбор заданий прошлых лет, мне кое-что совершенно случайно попало в руки, интересная задача: реализовать шахматы с "туманом войны" в консоли Идея показалась мне настолько вдохновляющей, что я решил пойти дальше, а что если превратить эту консольную головоломку в настоящую игру с графикой и той самой атмосферой тумана войны, который так знаком игрокам в стратегиях Идея зацепила сразу, представьте классические шахматы, но с элементом неожиданности. Вы не видите все фигуры противника, а только те клетки, куда могут ступить ваши фигуры. Каждый ход превращается в тактическую загадку, что скрывается в темноте? Где спрятался вражеский ферзь? и т.д. Так обычная подготовка к соревнованиям превратилась в увлекательный эксперимент, результатом которого стала эта статья и реализация шахмат с туманом войны на Python https://habr.com/ru/articles/958560/ #python 👉 @python_real

🚫👩‍💻 🚫 Как не нужно писать на Python Приглашаем на открытый урок. 🗓 27 октября в 20:00 МСК 🆓 Бесплатно. Урок в рамках с
🚫👩‍💻 🚫 Как не нужно писать на Python Приглашаем на открытый урок. 🗓 27 октября в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Python Developer. Professional». Даже опытные разработчики порой создают код, который работает — но жить с ним потом невозможно. На открытом уроке разберём типичные ошибки и антипаттерны в Python, поговорим о причинах появления «плохого» кода и способах сделать его понятнее, стабильнее и быстрее. Рассмотрим как распространённые, так и неожиданные примеры, которые помогут взглянуть на привычные решения под новым углом. На вебинаре разберём: ✔️ Основные антипаттерны и неудачные практики в Python-разработке ✔️ Почему появляются «плохие» решения и как их вовремя распознать ✔️ Подходы и инструменты, которые помогают улучшить качество кода В результате вебинара вы: ✔️Поймёте, чего стоит избегать при написании кода на Python ✔️Научитесь видеть и исправлять проблемные участки в своих проектах ✔️Узнаете, как писать читаемый, поддерживаемый и эффективный код 🔗 Ссылка на регистрацию: https://vk.cc/cQxmGa Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🐍 Что нового в Python 3.14 Python 3.14 принес кучу интересных обновлений, которые делают язык ещё мощнее и удобнее для разра
🐍 Что нового в Python 3.14 Python 3.14 принес кучу интересных обновлений, которые делают язык ещё мощнее и удобнее для разработчиков. Вот краткий обзор: 🔹 Новый модуль tomllib — теперь можно парсить TOML прямо из стандартной библиотеки без сторонних зависимостей. 🔹 Оптимизации скорости — Python продолжает становиться быстрее. Улучшения в байткоде и оптимизация работы с коллекциями дают заметный прирост производительности. 🔹 Новые возможности аннотаций типов — улучшена работа с типами TypeAliasType, а также добавлены новые инструменты для статического анализа. 🔹 Расширения для pattern matching — теперь можно использовать ещё более гибкие шаблоны, особенно для сложных структур данных. 🔹 Изменения в работе GIL — продолжается подготовка к многопоточному Python без GIL в будущем. https://realpython.com/python314-new-features/ #python 👉 @python_real

🔍Тестовое собеседование на Middle Python в четверг с разработчиком из Авито 9 октября(в четверг) в 19:00 по мск приходи онла
🔍Тестовое собеседование на Middle Python в четверг с разработчиком из Авито 9 октября(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика. Как это будет: 📂 Даня, старший разработчик в Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Даня будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Дане Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.

Episode 268: Advice on Beginning to Learn Python Что изменилось в обучении Python за последние несколько лет? Какие новые подходы и обновлённые советы стоит знать новичкам, начинающим свой путь в программировании? На этой неделе в подкасте Стивен Группетта и Мартин Брёус вновь обсуждают, как начать изучать Python. Мы делимся методами поиска мотивации, построения собственных проектов и освоения основ языка. Даём советы по установке Python и объясняем, почему не стоит зацикливаться на выборе «идеального» редактора. Также рассматриваем, как использовать большие языковые модели (LLM) в процессе обучения программированию и практиковаться в умении задавать хорошие вопросы. Topics: 00:00:00 – Introduction 00:02:36 – Martin’s teaching background 00:02:57 – Stephen’s teaching background 00:04:07 – Having a vested interest in learning 00:08:35 – No shortcut to learning the fundamentals 00:09:21 – Parallels to learning a foreign language 00:12:43 – What’s different about starting to learn Python now? 00:15:03 – Stephen’s journey to coaching and using LLMs 00:16:20 – Are LLMs helpful for learning? 00:18:50 – Teaching what you’ve learned to someone else 00:19:38 – Learning how to ask good questions 00:22:11 – Improved error messages 00:24:35 – REPL: Read Evaluate Print Loop 00:26:33 – Video Course Spotlight 00:27:48 – Installing Python and choosing an editor 00:35:16 – Considering the scale of beginner projects 00:37:39 – Should a beginner be concerned with making Pythonic code? 00:40:55 – Using LLM tools and defining your level of skill 00:42:39 – Python for Beginners: Code With Confidence - live course 00:47:32 – Looking at projects - Awesome Python 00:48:02 – Asking an LLM to explain the code generated 00:50:46 – Debuggers and seeing code run 00:51:23 – Thanks and goodbye https://realpython.com/podcasts/rpp/268/ #python 👉 @python_real

YAML: The Missing Battery in Python https://realpython.com/python-yaml/ #python 👉 @python_real
YAML: The Missing Battery in Python https://realpython.com/python-yaml/ #python 👉 @python_real

🔍Тестовое собеседование на Middle Python в четверг с разработчиком из Авито 25 сентября(в четверг) в 19:00 по мск приходи он
🔍Тестовое собеседование на Middle Python в четверг с разработчиком из Авито 25 сентября(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика. Как это будет: 📂 Даня, старший разработчик в Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Даня будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Дане Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.

🚀 FastAPI - современный асинхронный веб-фреймворк на Python, который позволяет создавать быстрые и удобные API. Статья от Re
🚀 FastAPI - современный асинхронный веб-фреймворк на Python, который позволяет создавать быстрые и удобные API. Статья от Real Python даёт отличное введение в работу с FastAPI: от установки и запуска первого приложения до обработки запросов и валидации данных с помощью Pydantic. Разбираются основы маршрутизации, использование Swagger UI для документации и преимущества асинхронности. Если вы хотите быстро стартовать с созданием API на Python, этот гайд - отличный первый шаг. https://realpython.com/get-started-with-fastapi/ #python 👉 @python_real

В Python стрелки (->) используются в аннотациях функций для указания возвращаемого типа. Это не строгая проверка типов, а лиш
В Python стрелки (->) используются в аннотациях функций для указания возвращаемого типа. Это не строгая проверка типов, а лишь подсказка для разработчиков и инструментов (например, mypy, IDE). Пример:

def greet(name: str) -> str:
    return "Hello, " + name
Здесь: * name: str — аргумент name должен быть строкой. * -> str — функция возвращает строку. Можно использовать любые типы из модуля typing или collections.abc, например:

from typing import List, Dict, Optional

def get_users() -> List[str]:
    return ["Alice", "Bob"]

def find_user(user_id: int) -> Optional[Dict[str, str]]:
    if user_id == 1:
        return {"name": "Alice"}
    return None
Аннотации никак не влияют на исполнение кода, это всего лишь type hints. https://realpython.com/what-does-arrow-mean-in-python/ #python 👉 @python_real

🚀 Подборка 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/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

🔴 Реальный собес на Python от ТехЛида с опытом работы в Авито и Яндексе в прямом эфире 11 сентября (уже в четверг!) в 19:00
🔴 Реальный собес на Python от ТехЛида с опытом работы в Авито и Яндексе в прямом эфире 11 сентября (уже в четверг!) в 19:00 по мск приходи на прямой эфир с реальным собеседованием на Middle разработчика. Почему точно нужно прийти: 📂 Савва Демиденко, ТехЛид с опытом в Яндексе и Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Савва будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Савве Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. 🔍Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.

🚀 Вышла интересная статья о сравнении UV и pip - двух инструментов для управления зависимостями в Python. pip - стандартный
🚀 Вышла интересная статья о сравнении UV и pip - двух инструментов для управления зависимостями в Python. pip - стандартный пакетный менеджер Python, который знаком каждому разработчику. Работает стабильно, но не отличается высокой скоростью. UV - современная альтернатива от Astral (разработчиков Ruff). Его главная фишка - невероятная скорость. Он значительно быстрее pip и poetry благодаря продуманной архитектуре и кэшу. В статье разбираются: - ключевые различия в работе с зависимостями; - производительность и удобство использования; - примеры установки пакетов и сборки окружения; - сценарии, где UV может полностью заменить pip. Если вы часто работаете с Python-проектами и хотите ускорить установку библиотек, стоит присмотреться к UV. https://realpython.com/uv-vs-pip/ #python 👉 @python_real

Как использовать pyproject.toml в Python Рассматриваются основные аспекты работы с этим файлом, его структура и как он помога
Как использовать 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

🔍Тестовое собеседование на Middle Python в четверг с разработчиком из Авито 28 августа(в четверг) в 19:00 по мск приходи онл
🔍Тестовое собеседование на Middle Python в четверг с разработчиком из Авито 28 августа(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика. Как это будет: 📂 Даня, старший разработчик в Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Даня будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Дане Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.

Getters и Setters в Python — это мощный инструмент для управления доступом к атрибутам объекта. В статье детально рассматрива
Getters и Setters в Python — это мощный инструмент для управления доступом к атрибутам объекта. В статье детально рассматривается, как их использовать для инкапсуляции данных и контроля за изменениями свойств объекта. Основные моменты: - Объяснение, почему в Python прямой доступ к атрибутам предпочтительнее, но геттеры и сеттеры остаются важными. - Использование декоратора @property для создания свойства с геттером и сеттером. - Примеры, как эти механизмы помогают улучшить читаемость и безопасность кода. https://realpython.com/python-getter-setter/ #python 👉 @python_real

📂 Как получить список всех файлов в директории на Python Статья о том, как с помощью Python получать список файлов в директо
📂 Как получить список всех файлов в директории на Python Статья о том, как с помощью Python получать список файлов в директориях. Рассмотрены различные способы, включая использование модулей os, os.path, glob и более современного pathlib. Особое внимание уделено: - Фильтрации файлов по расширению. - Рекурсивному поиску в подпапках. - Преимуществам каждого подхода. https://realpython.com/get-all-files-in-directory-python/ #python 👉 @python_real

🔍 Открытое собеседование на Python-бекендера с разработчиком из Avito и Яндекс в четверг 14 августа (уже в четверг!) в 19:00
🔍 Открытое собеседование на Python-бекендера с разработчиком из Avito и Яндекс в четверг 14 августа (уже в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика. Как это будет: 📂 Савва Демиденко, ТехЛид с опытом в Яндексе и Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Савва будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Савве Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.

Python Mixins: мощный инструмент для повторного использования кода В Python Mixin — это особый вид класса, который использует
Python Mixins: мощный инструмент для повторного использования кода В Python Mixin — это особый вид класса, который используется для расширения функционала других классов без необходимости создавать сложные иерархии наследования. Mixin-классы сами по себе, как правило, не предназначены для самостоятельного использования — они лишь добавляют дополнительное поведение. Основная идея Mixin Mixin — это способ «влить» функциональность в класс, комбинируя его с другими классами через множественное наследование. Например, если у нас есть класс LoggerMixin, он может добавлять возможность логирования в любой класс, который его наследует.

class LoggerMixin:
    def log(self, message):
        print(f"[LOG]: {message}")

class User(LoggerMixin):
    def __init__(self, name):
        self.name = name

user = User("Alice")
user.log("Пользователь создан")  # [LOG]: Пользователь создан
Принципы проектирования Mixin-классов 1. Изолированная функциональность — Mixin должен решать только одну конкретную задачу. 2. Не самостоятельный — Mixin не предназначен для создания экземпляров напрямую. 3. Малые зависимости — Mixin не должен жёстко зависеть от конкретной реализации других классов. 4. Имя — принято добавлять суффикс Mixin в название. Зачем использовать Mixin - Повторное использование кода без дублирования. - Упрощение кода и снижение связности. - Гибкость при расширении функционала. Пример: добавление сериализации в JSON

import json

class ToJSONMixin:
    def to_json(self):
        return json.dumps(self.__dict__)

class Point(ToJSONMixin):
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(4, 5)
print(p.to_json())  # {"x": 4, "y": 5}
Когда Mixin лучше не использовать - Когда поведение может быть реализовано через композицию. - Если множественное наследование приведёт к сложной и запутанной иерархии. - Когда Mixin начинает выполнять слишком много функций. Mixin — это мощный и элегантный способ добавлять функционал в классы Python, сохраняя код чистым и гибким. Но использовать их стоит осторожно, чтобы избежать проблем с читаемостью и сложным наследованием. https://realpython.com/python-mixin/ #python 👉 @python_real

Async IO в Python: что это и как с этим работать Асинхронное программирование в Python — это подход, позволяющий выполнять не
Async IO в Python: что это и как с этим работать Асинхронное программирование в Python — это подход, позволяющий выполнять несколько операций одновременно, не блокируя основной поток выполнения. Это особенно полезно для задач ввода-вывода (I/O), таких как сетевые запросы, работа с файлами и базы данных. Ключевые понятия * Сопрограммы (coroutines) — функции, которые можно приостанавливать и возобновлять. * Событийный цикл (event loop) — механизм, управляющий выполнением асинхронных задач. * await — оператор, который приостанавливает выполнение до завершения асинхронной операции. Пример кода:

import asyncio

async def main():
    print("Начало")
    await asyncio.sleep(1)
    print("Конец")

asyncio.run(main())
Когда использовать async? * Когда приложение работает с большим количеством сетевых запросов. * Для параллельного выполнения долгих операций ввода-вывода. * Когда требуется высокая отзывчивость программы. Когда не стоит использовать? * Для вычислительно тяжелых задач (лучше использовать multiprocessing). Асинхронность в Python строится вокруг asyncio, но есть и дополнительные библиотеки (например, aiohttp для асинхронных HTTP-запросов). https://realpython.com/async-io-python/ #python 👉 @python_real

Python 3.14. T-строки в Python: новый способ работы со строками? Python предлагает множество способов создания строк — от обы
Python 3.14. T-строки в Python: новый способ работы со строками? Python предлагает множество способов создания строк — от обычных строк до f-строк и raw-строк. Но начиная с Python 3.12, появляется новый способ: t-строки. Это экспериментальный синтаксис, предлагаемый для улучшения интернационализации (i18n) строк. В этом посте мы кратко рассмотрим: 🔘 Что такое t-строки? 🔘Зачем они нужны? 🔘Как их использовать? Что такое t-строки? t"..." — это новый синтаксис строк, похожий на f-строки, но предназначенный для упрощения перевода строк. Они позволяют использовать интерполяцию переменных и одновременно автоматически отмечать строку как подлежащую переводу.

name = "Алиса"
print(t"Привет, {name}!")
Такой синтаксис эквивалентен:

from gettext import gettext as _
name = "Алиса"
print(_("Привет, {name}!").format(name=name))
Зачем это нужно? В больших проектах часто нужно поддерживать несколько языков. В Python это обычно делается через gettext, где строки передаются в функцию _() и затем интерполируются вручную:

print(_("Привет, {name}!").format(name=name))
Но такой подход: - неявный, - подвержен ошибкам (особенно при интерполяции), - не всегда дружелюбен к линтерам и инструментам сборки переводов. t-строки делают этот процесс более чистым и читаемым. Как это работает? t-строки являются экспериментальной функцией в Python 3.12, и для их использования нужно включить feature flag:

from __future__ import tstrings
Полный пример:

from __future__ import tstrings

name = "Алиса"
print(t"Привет, {name}!")
Это даст тот же результат, что и с gettext, но с более читаемым и лаконичным синтаксисом. Совместимость и текущее состояние Пока t-строки находятся в стадии эксперимента. Они могут измениться или быть удалены в будущих релизах. Если вы работаете с интернационализацией и переводами — следите за этой фичей. Она может значительно упростить жизнь в будущем. https://realpython.com/python-t-strings/ #python 👉 @python_real