我是學裝飾的概念蟒蛇從以下鏈接: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