背景:我目前正在实施一些环境过程的预测模型。想象一下,如果你愿意,可以计算一些生态系统对不同温度的反应。
这是我第一次在Python中做这样的事情,而且我对如何组织文件很有用。我已经阅读了相关的问题,但它们似乎主要是关于不同的用例和/或处理更深入的问题,而不是关于在何处放置常量,参数等。
为您举例说明我现在的情况:
constants.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
model.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:如果有关于如何组织这样的项目的最佳实践,请帮助新手程序员。
答案 0 :(得分:1)
这个问题主要是基于意见的,但我会试一试。
如果您不想让用户访问常量,只能访问参数,那么您几乎可以正确地执行此操作(一个文件用于常量,另一个文件用于参数)。
如果您不介意用户能够更改常量,我建议您使用名为settings.py的单个文件,从中导入常量和诸如此类的东西。请记住,Python允许选择性导入,这意味着如果在.py
个文件中只需要一个常量,则可以导入该单个常量,因此这不是效率问题。我不会将所有常量保存在单个文件中,除非项目很小。
除此之外,我还建议您将模型特定的变量/常量存储为模型类中的静态属性。例如,我们可以像这样定义学校等级模型:
class GradeModel(BaseModel):
GRADE_TYPES = (
(1, 'Exam'),
(2, 'Final Paper'),
) # this is just an example
id = IntFieldType()
student_id = IntFieldType()
type = ChoiceType(choices=GRADE_TYPES)
value = IntFieldType()
这样,您可以将成绩类型常量称为GradeModel.GRADE_TYPES
。请注意,上面的代码更像伪代码,因为模型主要依赖于您正在使用的框架/库,但您可以获得它的要点。