gpt4 book ai didi

python - 如何在科学的Python脚本中处理全局参数

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:49 25 4
gpt4 key购买 nike

我正在用 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 中删除许多参数,但是每次调用函数时我都需要重新计算它们,这似乎效率更低。

人们在这些场景中是否使用标准解决方案?我应该提到的是,我的函数并没有改变 par 的属性,只是读取它们。如果可能的话,我也对实现高性能感兴趣。

最佳答案

通常,当您的程序在不同位置需要许多参数时,提出一个简洁的配置系统是有意义的,通常是一个为您自己的代码提供特定接口(interface)的类。

实例化该类后,您手头就有了一个可以传递的配置对象。在某些地方您可能想填充它,在其他地方您可能只想使用它。无论如何,这个配置对象将是全局可访问的。如果您的程序是 Python 包,那么此配置机制可能会编写在其自己的模块中,您可以从包中的所有其他模块导入该模块。

配置类可能提供有用的功能,例如参数注册(某个代码部分表示需要设置某个参数)、默认值定义和参数验证。

参数的实际数量基于默认值、用户给定的命令行参数或用户给定的输入文件。

关于python - 如何在科学的Python脚本中处理全局参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17726949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com