Почему мы возвращаем None в этом декораторе? - PullRequest
0 голосов
/ 24 февраля 2019

Я читаю этот фрагмент кода в Python:

def decorator_function(original_function):
    def wrapper_function(*arg,**kwargs):
        print("This line is executed before the original function")
        result = original_function(*arg, **kwargs)
        print("This line is executed after the original function")
        print (result)
        return result #Why do we need to return result from this decorator?
    return wrapper_function

@decorator_function
def display_info(name, age):
    print(name, age)

display_info("You", 1)
display_info("Me", 99)

Декорированная функция возвращает None, а приведенный выше фрагмент кода даст тот же результат, независимо от того, есть ли у нас эта строка, return result.

Мне интересно, есть ли какая-либо причина (Pythonic? Будущее обслуживание кода?), Чтобы вернуть этот None.

Фрагмент кода является частью учебника Python по декоратору на YouTube.

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Возвращается None, потому что ваш display_info() ничего не возвращает.

result = original_function(*arg, **kwargs)

Здесь результат, получит None.Поэтому, когда вы пытаетесь print(result) получить None.

Я полагаю, вы ожидали кортеж ("You", 1) в вашем result.

0 голосов
/ 24 февраля 2019

Декорированная функция вернет None, потому что функция display_info не имеет оператора return, поэтому она возвращает void.И замыкание внутри decorator_function возвращает и печатает то же значение, которое было возвращено при вызове исходной функции display_info (которая не затрагивается действием декоратора), очевидно, что оно вернет значение None.

Редактировать :

Зачем нам нужен этот оператор возврата?

Это совершенно необязательно в том случае, если выконечно, этот декоратор может быть добавлен только к функции, которая возвращает void или абсолютно ничего, но если это не так, вам нужно добавить инструкцию return, потому что если вы не добавите инструкцию return, ваша оригинальная функция, которая имеет шансы на возвратчто-то вернет пустоту.

...