我是学装饰的概念蟒蛇从以下链接: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'赋值来计算输出?
这些是关闭,而不是装饰。装饰器将*函数*作为参数,并根据输入返回一个新函数。闭包(大致)是一个函数,它可以在定义的范围内“记住”局部变量的值。这两个概念相关,因为装饰器通常会返回一个调用原始函数的闭包。 – chepner
也就是说,'g'是一个闭包,'f'只是一个返回闭包的函数。 – chepner