Python. Как "стукнуть" декоратором, то что функция должна запуститься?
message = ""
def new_message(func):
def notif():
func(message)
return notif
def create():
message = "hi"
new_message()
@new_message
def print(message):
print(message)
create() #hi
Можно ли реализовать такой код на Python? Если нет, то есть ли какие нибудь альтернативы?
Ответы (2 шт):
Это зависит от того, что Вы хотите сделать. Декоратор — это функция, которая позволяет обернуть другую функцию для расширения её функциональности без непосредственного изменения её кода. Декораторы достаточно полезны. Они расширяют возможности функции без редактирования её кода и являются гибким инструментом для изменения чего угодно (к примеру, декораторы часто применяются в работе с Flask Framework).
Однако в приведённом Вами кодом лично я бы не использовал декораторы (в данном случае проще без них). А вообще подробнее почитать о декораторах можно вот тут.
Не понял по вопросу что хотели, но думаю, если посмотрите всю поднаготную декоратора(без синтаксического сахара), то поймете, как он работает (убрал в комммент часть Вашего кода и прокинул аргументы):
# message = ""
def func(mes):
print('Я функция, которую хотят стукнуть =(')
print('И хотят, чтобы я сказзала - ', mes)
def new_message(_func_, _message_):
def notif(arg):
_func_(mes=arg)
return notif(arg=_message_)
def create():
message = "hi"
new_message(_func_=func,
_message_=message)
# @new_message
# def print(message__):
# print(message__)
print = create() #hi
print