我期待在一些學習材料這裏:http://anandology.com/python-practice-book/functional-programming.html#higher-order-functions-decorators變量範圍在Python高階函數
特別地,Memoize
部分,其中下面的代碼被用作例如用於高階函數:
def memoize(f):
cache = {}
def g(x):
if x not in cache:
cache[x] = f(x)
return cache[x]
return g
這是我的理解是memoize返回的函數不能訪問「緩存」變量,因爲它超出了「g」的定義範圍。
例如,如果我做result_function = memoize(some_function)
result_function
將不知道任何cache
變量,因爲它是在g
函數之外聲明的並且僅返回g
函數。爲什麼它能夠工作,而不是拋出錯誤?
我覺得你要找的詞是'閉包'。 – polku
它的工作原理是「超出範圍」並不意味着您無權訪問它。更高範圍內的每個變量都綁定到在該範圍內定義的函數(並通過遞歸到其子範圍),除非這些函數實際上不使用它們(在這種情況下,解釋器將簡單地將其收集)。類似的(但不完全一樣),你可以在任何函數中使用全局變量。 – freakish