2015-02-23 85 views
0

我認爲這實際上是一個簡單的comp問題。 SCI。人,但我不在comp。 SCI。程序並且不記得任何術語。按功能分配和參考數據

我做了一大套基本上嵌套的函數來創建一個大的numpy記錄數組。

data = func_to_make_large_structure()  

現在,當我給你data這樣的,它存儲的大結構,因爲它是在函數返回之後,還是函數被調用,並重新計算每次調用的時間呢? 構造該結構需要30秒,這比使用對象存儲數據時在OO中創建的類似結構花費的時間要長得多。
此外,我對數據進行了大量的處理,而功能程序比OO表單花費的時間要長得多。

這是因爲每次調用data時都會重新計算數據嗎? 如果是這樣,我怎麼只存儲數據而不必每次調用函數?

+1

將此標記爲您正在使用的語言可能會很有用 – beresfordt 2015-02-23 23:36:37

+0

通常在這些情況下,在此行之後引用'data'將不會調用對'func_to_make_large_structure()'的另一個調用,因爲您正在分配* result *那個函數到'data'中。然而,有些語言允許你傳回函數指針或函數引用。如果是這樣的話,那麼每當你引用'data'時你可能會調用一個函數調用。因此,如上所述,知道 1)您的語言 2)func_to_make_large_structure()的聲明是什麼樣的(參數和返回類型是什麼?) – wilkesybear 2015-02-23 23:50:05

回答

1

函數被調用後,變量data不再與該函數有任何關聯,所以如果再次調用func_to_make_large_structure(),它將再次執行所有相同的計算。一種避免這種情況的技術叫做memoization,在this question中描述了在Python中使用它的技術。

但是,如果您問初始調用後,每次訪問data變量時調用func_to_make_large_structure,則不會。