Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Декораторы Python

#python #python_3x #декоратор


Поясните, пожалуйста, следующее высказывание, желательно с примерами. Я новичок и
никак не могу осилить эти декораторы.


  Декораторы могут быть использованы для расширения возможностей функций из сторонних
библиотек (код которых мы не можем изменять).

    


Ответы

Ответ 1



Предположим, что в душе вы настоящий римлянин и вам неудобны варварские цифры, которые использует Python. Есть способ преобразовывать варварские цифры в римские и обратно - модуль roman. Но чтобы использовать его со стандартными функциями, такими как min и max, придётся писать код преобразований перед каждым вызовом. Типа: min_number = toRoman(min(fromRoman('VII'), fromRoman('X'))) Неудобно и неблаговидно! Поможет декоратор: from functools import wraps def romanize(f): @wraps(f) def wrapper(*args, **kwargs): return toRoman(f(tuple(fromRoman(i) for i in args), **kwargs)) return wrapper Декорируем интересующие функции min = romanize(min) max = romanize(max) И теперь в любом месте кода можем использовать их с римскими цифрами: min_number = min('VII', 'X')

Комментариев нет:

Отправить комментарий