我寫在Python一塊科學的軟件的方法,包括兩者的泊松方程求解器(使用牛頓法)上的矩形網格,和一個粒子在細胞代碼。我將牛頓求解器和粒子單元內代碼編寫爲獨立函數,這些函數由我的主腳本調用。如何處理全局參數在科學Python腳本
我原本寫的代碼作爲一個大的腳本,但決定分手的腳本,使其更加模塊化,並且使各個功能可以在自己被調用。我的問題是我有大量的「全局」變量,我認爲這個問題的參數。這主要包括定義問題幾何和網格的問題常量和參數(例如尺寸,某些邊界條件的位置,邊界條件等)。
這些參數對主腳本和各個函數都是必需的。我的問題是:什麼是存儲這些變量的最佳方式(也是最合適的),以便主腳本和函數都可以訪問這些變量。
我目前的解決方案是定義在一個單獨的模塊(parameters.py)一類像這樣:
class Parameters:
length = 0.008
width = 0.0014
nz = 160
nr = 28
dz = length/nz
dr = width/nr
...
在我的主要腳本然後我有:
from parameters import Parameters
par = Parameters()
coeff_a = -2 * (1/par.dr**2 + 1/par.dz**2)
...
這種方法可以讓我然後使用par
作爲我的參數的容器,它可以傳遞給我想要的任何函數。它還提供了一種簡單的方法來輕鬆設置問題空間,以便僅運行其中一個功能。我唯一擔心的是每個函數都不需要存儲在par
中的所有內容,因此它總是向前傳遞它似乎效率低下。我可能會從par中刪除很多參數,但是每次調用函數時都需要重新計算它們,這似乎更加低效。
是否有人們在這些場景中使用的標準解決方案?我應該提到,我的職能並沒有改變票面的屬性,只是閱讀它們。如果可能的話,我也對獲得高性能感興趣。