def funcA(x):
return x
是funcA.__code__.__hash__()
合適的方法來檢查是否funcA
已經改變?哈希Python函數
我知道funcA.__hash__()
不會像id(funcA)/16
一樣工作。我檢查過,__code__.__hash__()
不適用。我也在ipython終端中測試了這個行爲,它似乎成立了。但是這保證了工作?
爲什麼
我想有一箇舊版本的功能比較,相同功能的新版本的方式。
我試圖創建一個基於磁盤的/長期高速緩存的裝飾。因此,我需要一種方法來確定功能是否發生了變化。我還需要查看調用圖來檢查被調用的函數是否已經改變,但這不是這個問題的一部分。
要求:
- 需要是在多個電話和設備穩定。 1表示在Python 3.3中,每個新實例的開始都隨機分配了。雖然它也說「哈希隨機化被默認禁用」。理想情況下,即使啓用了隨機化,我也希望這個功能可以保持穩定。
- 理想情況下,它將爲
def funcA: pass
和def funcB: pass
產生相同的散列值,即僅當函數的名稱發生變化時。可能沒有必要。 - 我只在乎Python 3的
一個替代辦法是哈希包含給定函數的文件中的文本。
也許像'pickle'會更有用嗎? – 2014-10-28 18:20:53
鹹菜如何更有用?我應該醃製該功能嗎? – Unapiedra 2014-10-28 18:25:03
「請注意,函數(內置的和用戶定義的)由」完全限定的「名稱引用而非值賦值,這意味着只有函數名稱被pickle,以及函數在其中定義的模塊的名稱。函數的代碼和它的任何函數屬性都沒有被醃製。「來自pickle上的Python文檔。 – Unapiedra 2014-10-29 07:47:14