【发布时间】:2014-08-29 09:37:02
【问题描述】:
背景:我目前正在实施一些环境过程的预测模型。如果您愿意,可以想象一个模型可以计算某些生态系统对不同温度的反应。
这是我第一次在 Python 中做这样的事情,我对如何组织我的文件有点了解。我已阅读相关问题,但它们似乎大多是关于不同的用例和/或处理更深入的问题,而不是关于将常量、参数等放在哪里。
给你一个我现在拥有的例子:
常量.py:
# these should never be touched
CONST1 = 1
CONST2 = 2
# etc
parameters.py:
# these can and should be changed by the user
par1 = 1
par2 = 2
par3 = 3
# etc
模型.py:
# here are the model's functions
import constants as c
def fun1(par1, par2):
res1 = c.CONST1 * par1 + par2
return res1
def fun2(par2, par3):
res2 = c.CONST2 * par2 + par3
return res2
# etc
main.py:
# this file is used to run the model
import model as m
import parameters as p
res1 = m.fun1(p.par1, p.par2)
res2 = m.fun2(p.par2, p.par3)
# plot results etc
像这样将常量、参数和函数保存在单独的文件中是个好主意吗,或者至少这些常量应该是 model.py 中的全局变量,因为无论如何我都不碰它们?单文件解决方案(常量、参数、模型和一个 .py 中的主函数)的“极端情况”是否被认为是不好的风格?几乎任何函数都使用的变量(例如时间,或者我在 model.py 中导入的常量)呢?我应该明确地将它们传递给每个函数,还是可以/应该将它们设为全局变量?
TL;DR:如果有任何关于如何组织这样的项目的最佳实践,请帮助新手程序员。
【问题讨论】:
-
这个问题的答案没有对错之分,随着项目的发展,人们的需求也会有所不同,但在我看来,分离可以更容易地找到要更改的内容。我通常每个包都有一个 constants.py(每个文件夹都包含一个 init.py)。
-
你可以看看其他科学包是怎么做的——例如,
numpy是开源的,所以你可以看到他们的代码:github.com/numpy/numpy -
因为这实际上取决于项目以及代码的使用方式,所以没有一刀切的答案。