Python中利用函式裝飾器實現備忘功能

2021-08-17 10:15:40 字數 891 閱讀 9485

備忘 - code.google:

有一項能夠加速大型複雜函式的簡單技術叫做備忘(memoization),這是某種形式的快取。當每次呼叫函式時,乙個備忘函式會在table中儲存被調函式的輸入引數以及返回值。如果這個函式以同樣的輸入引數被再次呼叫時,它返回的就是儲存在table中的值而不需要再次進行計算。

clojure內建支援備忘的函式是memoize,它接收乙個函式做為引數,返回這個函式的備忘版本:

(defn really-slow-function [x y z] ...) (def faster-function (memoize really-slow-function))
備忘是乙個犧牲記憶體加速執行的經典例子。如果乙個函式需要花費比雜湊表定址更多的時間去計算結果,而且它又經常以同樣的輸入引數被呼叫,那麼採用備忘就是一種好的候選方案。只有純函式--意即針對特定輸入總是返回同樣結果的函式--能夠進行備忘。

python中利用函式裝飾器實現備忘功能

「備忘」的定義

「memoization」(備忘)這個詞是由donald michie在2023年提出的,它基於拉丁語單詞「memorandum」(備忘錄),意思是「被記住」。雖然它和單詞「memorization」在某種程度上有些相似,但它並不是該單詞的錯誤拼寫。實際上,memoisation是一種用於通過計算來加速程式的技術,它通過記住輸入量的計算結果,例如函式呼叫結果,來實現其加速目的。如果遇到相同的輸入或者具有相同引數的函式呼叫,那麼之前儲存的結果就可以被再次使用,從而避免一些不必要的計算。在很多情況下,可以使用乙個簡單的陣列來儲存結果,但也可以使用許多其他的資料結構,例如關聯陣列,它在perl語言中叫做雜湊,在python語言中稱為字典。

備忘功能可以由程式設計師顯式地程式設計實現,但是一些程式語言如python,都提供了自動備忘函式的機制。

Python案例實操 函式裝飾器

help classmethod help on class classmethod in module builtins class classmethod object classmethod function method convert a function to be a class me...

python裝飾器 函式裝飾器,類裝飾器

只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...

python 裝飾器 函式裝飾器 類裝飾器

python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...