在Python代码中放置常量,参数等用于研究的位置?

时间:2014-08-29 09:37:03

标签: python code-organization

背景:我目前正在实施一些环境过程的预测模型。想象一下,如果你愿意,可以计算一些生态系统对不同温度的反应。

这是我第一次在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:如果有关于如何组织这样的项目的最佳实践,请帮助新手程序员。

1 个答案:

答案 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。请注意,上面的代码更像伪代码,因为模型主要依赖于您正在使用的框架/库,但您可以获得它的要点。