P
PYTHON IN DEPTH🐍
@python_in_depth414 подп.
555просмотров
16 мая 2023 г.
Score: 611
Комбинируем декораторы Допустим, у нас есть функции, которые работают со строками. Возьмем, например, функцию, которая возвращает строчку из 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))
555
просмотров
1631
символов
Нет
эмодзи
Нет
медиа

Другие посты @python_in_depth

Все посты канала →
Комбинируем декораторы Допустим, у нас есть функции, которые — @python_in_depth | PostSniper