почему я не могу распечатать вывод декораторов? - PullRequest
0 голосов
/ 16 апреля 2019

это небольшое простое упражнение для декораторов, но я не понимаю, почему я не могу распечатать вывод функции в этом случае, когда эти две строки кода соответственно записаны в конце x = f1 - x (f3), но это происходит, когдазаписано так x = f1 (f3) - x ()

def f1(f):
    def f2():
        print (f'this is before the function call')
        f()
        print (f'this is after the function call')
    return f2

def f3():
    print('this is f3')


x=f1  |the other scenario|  x=f1(f3)
x(f3) |the other scenario|  x()

1 Ответ

0 голосов
/ 16 апреля 2019

f1 - это функция, которая возвращает функцию f2 и ей передается функция f, которая вызывается в функции f2.Когда вы присваиваете x=f1(f3), вы вызываете функцию f1, которая возвращает функцию f2, которая присваивается переменной x.Когда вы затем вызываете x(), x назначается вызываемая функция f2 и, в свою очередь, вызывает f3, которая была передана как переменная f в f1.

, если вы вызываете x=f1 Вы назначаете функцию f1 переменной x.Если вы затем вызываете x(f3), вы вызываете функцию f1 и передаете f3 в качестве аргумента f.f1 возвращает функцию f2, которая никогда не вызывается.Если вы присвоите возвращаемое значение новой переменной y y=x(f3), а затем вызовете y(), переменной y теперь будет присвоена функция f2, которая при правильном вызове печатает вывод.

...