2017-03-06 68 views
0

我想寫一個持久化備忘錄(記憶到磁盤)的裝飾器。因爲我想爲許多函數使用這個裝飾器,所以我必須決定爲這些函數保存記憶數據的位置。我用Google搜索了一圈,發現兩種解決方案:python持久化備忘錄的目標

  1. 讓功能決定在哪裏通過函數名存儲memoizing數據
  2. 自動確定在何處存儲數據

然而,這兩種解決方案,每個功能都必須在名稱(或目的地)碰撞的情況下「互相」知道,這是一種不好的設計。

因此,我的問題是,如何避免這種碰撞?

+2

必須解決類似問題的[pickle module](https://docs.python.org/3/library/pickle.html)使用酸洗功能的「完全限定名稱」。 –

+0

有趣的問題,但我沒有答案。不過,我有幾條評論。 :) 1.您裝飾的功能不應該知道它們是裝飾的,所以它們不應包含與memoization目的地相關的代碼或數據。 OTOH,你的裝飾器可以根據'__file__'和函數的'.__ name__'選擇一個默認目的地,但也可以接受一個參數來選擇不同的目標路徑,或者修改默認目標路徑。 2.注意確保您的程序可以處理多次同時運行。 –

回答

1

將其保存在與__file__相鄰的位置,該位置是模塊從中加載的路徑。我相信在某些情況下,它可能是一個相對路徑,因此您可能希望將備忘錄直接存儲在該路徑中,或將其轉變爲絕對路徑或其他內容。