Веб-версияОткрыть в Telegram

СообщениеКомбинируем декораторы

16 мая 2023
P
Комбинируем декораторы Допустим, у нас есть функции, которые работают со строками. Возьмем, например, функцию, которая возвращает строчку из Zen of Python: def readability(): return 'Readability counts' print(readability()) Readability counts А теперь мы хотим, чтобы можно было показать текст в двух вариантах: жирным и курсивом. Вот два декоратора, один из которых добавляет тег <<жирный>>, а второй <<курсив>> : def bold(func): def wrapper(): return '<b>' + func() + '</b>' return wrapper def italic(func): def wrapper(): return '<i>' + func() + '</i>' return wrapper Как уже договаривались в прошлом посте запись: @bold def readable(): return 'Readability counts' Эквивалентна записи readable = bold(readable) И после применения декоратора вызов функции дает текст print(readable()) <b>Readability counts</b> А что если мы хотим получить текст одновременно и жирный и с курсивом? Можно сделать композицию декораторов: @italic @bold def readable(): return 'Readability counts' print(readable()) <i><b>Readability counts</b></i> Обратите внимание, что результат в зависимости от порядка применения декораторов будет разным: @bold @italic def readable(): return 'Readability counts' print(readable()) <b><i>Readability counts</i></b> Так получается из-за разного порядка выполнения функций: в первом случае мы сначала добавляем тэг <<жирный>>, а сверху оборачиваем в <<курсив>>: readable = italic(bold(readable)) А во втором -- наоборот: readable = bold(italic(readable))
1 · 566 ·

Рядом в ленте

PPYTHON IN DEPTH🐍Гид по множественному присваиванию Уверена, что множественное присваивание в Python видели все. Выглядит оно вот так: >>> x, y, z = 1, 2, 3 >>> x 1 >>> z 3 На сPPYTHON IN DEPTH🐍Введение в декораторы В нескольких следующих постах я хочу поговорить о декораторах. Будет базовое определение, мотивация их использовать, всякие хитрости, а ещ
это сообщение
PPYTHON IN DEPTH🐍Исключения Представьте, вы приступаете к работе над новым проектом и обнаруживаете в логах следующие сообщения, которые смешаны с успешными запросами к серверу:PPYTHON IN DEPTH🐍Еще про исключения: repr(e) -- это, конечно хорошо, но ведь есть ещё лучше, а именно: from traceback import print_exc ... my_dict = {} try: b = my_dict["bad"] e
🐍🐍Python🪆🐍Python🪆@python_chat_ru · группа · Технологии
20участников39сообщений в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем