Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Топ:
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Интересное:
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Дисциплины:
2023-02-03 | 28 |
5.00
из
|
Заказать работу |
|
|
НАЧАТЬ БЕСПЛАТНО LETPY.COM
Декораторы в Python и примеры их практического использования.
Итак, что же это такое? Для того, чтобы понять, как работают декораторы, в первую очередь следует вспомнить, что функции в python являются объектами, соответственно, их можно возвращать из другой функции или передавать в качестве аргумента. Также следует помнить, что функция в python может быть определена и внутри другой функции.
Вспомнив это, можно смело переходить к декораторам. Декораторы — это, по сути, "обёртки", которые дают нам возможность изменить поведение функции, не изменяя её код.
Создадимсвойдекоратор " вручную ":
>>>
>>>def my_shiny_new_decorator(function_to_decorate):
... # Внутри себя декоратор определяет функцию-"обёртку". Она будет обёрнута вокруг декорируемой,
... # получая возможность исполнять произвольный код до и после неё.
... def the_wrapper_around_the_original_function():
... print("Я - код, который отработает до вызова функции")
... function_to_decorate() # Самафункция
... print("А я - код, срабатывающий после")
... # Вернёмэтуфункцию
... return the_wrapper_around_the_original_function
...
>>> # Представим теперь, что у нас есть функция, которую мы не планируем больше трогать.
>>>def stand_alone_function():
... print("Я простая одинокая функция, ты ведь не посмеешь меня изменять?")
...
>>> stand_alone_function()
Я простая одинокая функция, ты ведь не посмеешь меня изменять?
>>> # Однако, чтобы изменить её поведение, мы можем декорировать её, то есть просто передать декоратору,
>>> # который обернет исходную функцию в любой код, который нам потребуется, и вернёт новую,
>>> # готовуюкиспользованиюфункцию :
>>> stand_alone_function_decorated = my_shiny_new_decorator(stand_alone_function)
|
>>> stand_alone_function_decorated()
Я - код, который отработает до вызова функции
Я простая одинокая функция, ты ведь не посмеешь меня изменять?
А я - код, срабатывающий после
Наверное, теперь мы бы хотели, чтобы каждый раз, во время вызова stand_alone_function, вместо неё вызывалась stand_alone_function_decorated. Дляэтогопростоперезапишем stand_alone_function:
>>>
>>> stand_alone_function = my_shiny_new_decorator(stand_alone_function)
>>> stand_alone_function()
Я - код, который отработает до вызова функции
Я простая одинокая функция, ты ведь не посмеешь меня изменять?
А я - код, срабатывающий после
Собственно, это и есть декораторы. Вот так можно было записать предыдущий пример, используя синтаксис декораторов:
>>>
>>> @my_shiny_new_decorator
... def another_stand_alone_function():
... print("Оставь меня в покое")
...
>>> another_stand_alone_function()
Я - код, который отработает до вызова функции
Оставь меня в покое
А я - код, срабатывающий после
То есть, декораторы в python — это просто синтаксический сахар для конструкций вида:
another_stand_alone_function = my_shiny_new_decorator(another_stand_alone_function)
При этом, естественно, можно использовать несколько декораторов для одной функции, например так:
>>>
>>>def bread(func):
... def wrapper():
Print()
Func()
... print("<\______/>")
Return wrapper
...
>>>def ingredients(func):
... def wrapper():
... print("# помидоры #")
Func()
... print("~ салат ~")
Return wrapper
...
>>>def sandwich(food="-- ветчина --"):
... print(food)
...
>>> sandwich()
-- ветчина --
>>> sandwich = bread(ingredients(sandwich))
>>> sandwich()
#помидоры#
--ветчина--
~салат~
<\______/>
И используя синтаксис декораторов:
>>>
>>> @bread
... @ingredients
... def sandwich(food="-- ветчина --"):
... print(food)
...
>>> sandwich()
# помидоры #
-- ветчина --
~салат~
<\______/>
Также нужно помнить о том, что важен порядок декорирования. Сравните с предыдущим примером:
>>>
>>> @ingredients
... @bread
... def sandwich(food="-- ветчина --"):
... print(food)
...
>>> sandwich()
# помидоры #
-- ветчина --
<\______/>
~салат~
|
|
|
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!