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 шт):

Автор решения: Anaconda

Это зависит от того, что Вы хотите сделать. Декоратор — это функция, которая позволяет обернуть другую функцию для расширения её функциональности без непосредственного изменения её кода. Декораторы достаточно полезны. Они расширяют возможности функции без редактирования её кода и являются гибким инструментом для изменения чего угодно (к примеру, декораторы часто применяются в работе с 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
→ Ссылка