Форум сайта python.su
Примеры:
1.
def say_hello(): print('Hello') def do_thmth(function): def wrap(): print('Сказал:') function() print('Улыбнулся') return wrap do_thmth(say_hello)
def operator(op): def sum (first = 5, second = 5): return sum def minus (first = 5, second = 2): return minus if (op == '+'): return sum else: return minus
Отредактировано fshshsh (Май 12, 2017 18:33:04)
Офлайн
Неправильно. Декорирование может вообще поменять функцию при определенных внешних факторах. Или дополнительно дописать что-то куда-то. Например, в лог.
P.S. Вот вам задание на понимание. Написать декоратор, который будет писать в какой-нибудь файл время вызова функции и ее имя.
Офлайн
fshshshУ тебя есть функция, ты её передаёшь в декоратор, а из декоратора возвращается новая функция. (Вообще, декоратор - это шаблон ООП.) Вот когда функция вернулась из декоратора, она встаёт на место старой функции. И когда ты пользуешься старой функцией, на самом деле вызывается продекорированная.
Правильно ли я понял, что если шаг 2 не нужен (не нужно передавать аргументы), то декорировать не нужно?
>>> def silent_dec(func): ... def wrapper(): ... return 'nothing' ... return wrapper ... >>> def hello(): ... return 'hello' ... >>> >>> hello() 'hello' >>>
>>> def silent_dec(func): ... def wrapper(): ... return 'nothing' ... return wrapper ... >>> @silent_dec ... def hello(): ... return 'hello' ... >>> >>> hello() 'nothing' >>>
Отредактировано py.user.next (Май 13, 2017 04:22:03)
Офлайн