我正在用 Python 编写一个科学软件,它包括一个矩形网格上的泊松方程求解器(使用牛顿法)和一个粒子单元代码。我已将 Newton Solver 和粒子单元代码编写为单独的函数,由我的主脚本调用。
我最初将代码编写为一个大脚本,但决定拆分脚本,使其更加模块化,并且可以单独调用各个函数。我的问题是我有大量“全局”变量,我认为这些变量是问题的参数。这主要包括定义问题几何和网格的问题常数和参数(例如尺寸、某些边界条件的位置、边界条件等)。
主脚本和各个函数都需要这些参数。我的问题是:存储这些变量的最佳方式(也是最合适的方式)是什么,以便主脚本和函数都可以访问它们。
我目前的解决方案是在单独的模块(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 中删除许多参数,但是每次调用函数时我都需要重新计算它们,这似乎效率更低。
是否有人们在这些场景中使用的标准解决方案?我应该提一下,我的函数并没有改变 par 的属性,只是读取它们。如果可能的话,我也对实现高性能感兴趣。