2016-11-11 109 views
1

我在Matlab中編寫了一些代碼,其中在腳本中執行的變量範圍保留在「工作區」中。我正在處理的數據非常大,因此每次執行腳本需要20-30分鐘才能產生必要的結果。 Matlab的優點是,在執行後,如果我希望將代碼添加到腳本的末尾,我可以將其執行到結果變量,而不必從頭開始重新運行代碼。腳本執行後保留命名空間和變量值

如何在Python中執行類似的操作,其中變量的值從一個腳本執行保留到下一個?

+2

https://ipython.org/notebook.html –

+0

爲了更好地捕捉我認爲你的意思,我已經改寫了你的問題和標題。如果我誤解了某些東西,請隨時回滾。 – skrrgwasme

回答

0

如果我理解正確。

我認爲最好的選擇是直接使用python shell而不用在腳本中編寫腳本然後運行它。

第二選擇是酸洗或對象序列:

「酸洗」是過程,由此Python對象層次 轉換成字節流,而「取儲存」是逆 操作,由此一個字節流被轉換回對象 層次結構。

"Python object serialization"

+0

當然有可能,但如果計算複雜到20-30分鐘,我認爲它不太實際。 – skrrgwasme

+0

我認爲這取決於代碼的格式和可視化,而不是運行時間。 – anati

1

您可以在執行,諸如與shelvejson模塊的端寫變量出到磁盤上的一些持久性存儲器。然後在腳本開始處添加一些邏輯,嘗試讀取永久存儲器中的變量並恢復工作空間,並在加載失敗時重新運行計算。

1

你真的想運行一個交互式的python shell。這就是你在MATLAB中所做的,所有的腳本都在同一個MATLAB shell中運行。這就是爲什麼變量會持續運行,因爲shell正在保存它們。

與python的不同之處在於它有兩種運行腳本的方法:在python shell或standalone中。你在Python中單獨運行它們,這在MATLAB中不是一個選項。

如果你想要儘可能接近你在MATLAB中做的事情,只需將代碼包裝在函數中的腳本中,啓動一個python shell並運行該函數。

但是,這通常不是像您正在做的那樣長時間運行的重複代碼的最佳方法。更好的方法是使用IPython/Jupyter筆記本。該接口允許您選擇性地運行部分代碼,重新組織部分以及許多其他有用的功能。它還具有一項功能,可讓您自動在會話中保留特定的變量。