0
我目前正在學習裝飾器,這個例子應該是一個基本的裝飾器,它保存了遞歸斐波那契函數的結果,但是我有幾個問題。首先是「fn」,那只是一個變量的名字?或者它是Python語言的一部分。 'KeyError'同樣的問題。我也不明白爲什麼在函數體中,有時ARGS在前面,其他時間*不(應該不是總是有*)試圖實現一個Python裝飾器,被困在幾個地方
def memoize(fn):
stored_results = {}
def memoized(*args):
try:
return stored_results[args]
except KeyError:
result = stored_results[args]=fn(*args)
return result
return memoized
def fibonacci(n):
if n == 0 or n == 1:
return n
else:
return (fibonacci(n-1)+fibonacci(n-2))
@memoize
fibonacci(5)
謝謝!我知道參數意味着多個參數,但我仍然不明白爲什麼有時候在這個例子中,前面有一個明星,有時不存在 – user2897013
@ user2897013,它取決於裝飾器的用例。如果裝飾器應該使用任意函數(參數可能會有所不同),那麼它使用'*',如果它應該被具有固定參數的函數使用,那麼它將指定參數。 – falsetru