在Python代码中,研究常量、参数等该放在哪里?

2 投票
1 回答
867 浏览
提问于 2025-04-18 19:28

背景:我现在正在做一个预测模型,目的是模拟某个环境过程。可以想象成一个模型,用来计算生态系统在不同温度下的反应。

这是我第一次在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里作为全局变量,因为我反正不怎么动它们?如果把所有东西(常量、参数、模型和主函数)都放在一个文件里,这种极端的做法算不算坏风格?还有那些几乎每个函数都用到的变量(比如时间,或者我在model.py中引入的常量):我应该每次都明确传给每个函数,还是可以/应该把它们设为全局变量?

总结:如果有关于如何组织这种项目的最佳实践,请帮帮我这个新手程序员。

1 个回答

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 来调用成绩类型常量。注意,上面的代码更像是伪代码,因为模型主要依赖于你使用的框架或库,但你大概明白我的意思了。

撰写回答