python中的装饰器,它们如何生成函数?

时间:2016-10-22 09:19:02

标签: python

我从以下链接学习了python中装饰器的概念:

http://www.python-course.eu/python3_decorators.php

我对其中的以下代码段有一个基本的疑问:

def f(x):

    def g(y):
        return y + x + 3 
    return g

nf1 = f(1)

nf2 = f(3)

print(nf1(1))

print(nf2(1))

在此页面中,写入最后两行的输出分别为'5'和'7'。 但正如我所看到的,我们只传递'x'的值,它从哪里得到'y'的值?它如何为'Y'分配值来计算输出?

1 个答案:

答案 0 :(得分:1)

函数f创建并返回一个名为g的新函数。

因此,此代码通过传递gx=1来创建两个x=3函数:

nf1 = f(1)

nf2 = f(3)

然后使用参数g调用nf1函数(存储在nf2y=1中):

print(nf1(1))

print(nf2(1))

如果他们写下等价物,那么可能(或许不是)会更容易理解:

print(f(1)(1))  # x=1, y=1
print(f(3)(1))  # x=3, y=1