2016-09-28 42 views
0

比方說,我有一個Python函數,其中xy都是比較大的對象(表,NumPy的矩陣等):如何保存值,如果打不捕捉回報

def myfun(x): 
    y=some complicated function of x 
    return y 

如果在交互式會話的用戶調用此爲:

myfun(5) 

電話是基本沒用,因爲y丟失。我們還假設該函數需要一段時間才能運行。有沒有辦法檢索答案,因此用戶不必重新運行,即answer=myfun(5)?另外,寫這個函數的好方法(pythonic)是爲了使這個方案「防呆」。一些不太好的選擇是:

需要一個存儲該值的參數,例如,

def myfun(x,y): 
    y = some complicated function of x 
    return y 

或許:

def myfun(x): 
    y = some complicated function of x 
    global temp 
    temp = y 
    return y 

在後一種情況下,如果用戶再誤稱爲myfun(5),還有的y=temp的選項,得到的答案回來..但使用global似乎只是錯誤的。

+2

http://stackoverflow.com/questions/1988804/what-is-memoization-and-how-can-i-use-it-in-python – danidee

+0

@danidee good (儘管這個問題可能是過度的) –

回答

4

y=_

假設你是在交互式Python控制檯。 _是持有最後一個「結果」的魔法

+1

(此外,這個問題在上下文之外沒什麼意義:P) –

+1

如果你使用IPython,像這樣的結果也存儲在'Out'對象中,所以你可以看看輸出旁邊的小Out [15]:或Out [42]:標籤,並訪問Out [15]或Out [42]通過進一步的輸出在'_'之外。 – user2357112

+0

啊我fiigured ipython有一些額外的鐘聲和口哨聲:P,但我沒有用夠它如此:P –