Найти в Дзене
Машинное обучение

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

Допустим, у нас есть функции, которые работают со строками. Возьмем, например, функцию, которая возвращает строчку из Zen of Python: А теперь мы хотим, чтобы можно было показать текст в двух вариантах: жирным и курсивом. Вот два декоратора, один из которых добавляет тег <<жирный>>, а второй <<курсив>> : Как уже договаривались в прошлом посте запись Эквивалентна записи readable = bold(readable) И после применения декоратора вызов функции дает текст print(readable()) <b>Readability counts</b> А что если мы хотим получить текст одновременно и жирный и с курсивом? Можно сделать композицию декораторов: Обратите внимание, что результат в зависимости от порядка применения декораторов будет разным: Так получается из-за разного порядка выполнения функций: в первом случае мы сначала добавляем тэг <<жирный>>, а сверху оборачиваем в <<курсив>>: readable = italic(bold(readable)) А во втором -- наоборот: readable = bold(italic(readable)) Читаемость имеет значение! И порядок тоже. 🐠 #декоратор

Допустим, у нас есть функции, которые работают со строками. Возьмем, например, функцию, которая возвращает строчку из Zen of Python:

А теперь мы хотим, чтобы можно было показать текст в двух вариантах: жирным и курсивом. Вот два декоратора, один из которых добавляет тег <<жирный>>, а второй <<курсив>> :

Как уже договаривались в прошлом посте запись

Эквивалентна записи

readable = bold(readable)

И после применения декоратора вызов функции дает текст

print(readable())
<b>Readability counts</b>

А что если мы хотим получить текст одновременно и жирный и с курсивом? Можно сделать композицию декораторов:

Обратите внимание, что результат в зависимости от порядка применения декораторов будет разным:

Так получается из-за разного порядка выполнения функций: в первом случае мы сначала добавляем тэг <<жирный>>, а сверху оборачиваем в <<курсив>>:

readable = italic(bold(readable))

А во втором -- наоборот:

readable = bold(italic(readable))

Читаемость имеет значение! И порядок тоже. 🐠

#декораторы #композиция #функциональный_стиль

Python/ django
Python RU

#softwareengineer #pythonlearning #computerscience #coder #python3 #pythoncode #pythonprogramming