在Python代码中,研究常量、参数等该放在哪里?
背景:我现在正在做一个预测模型,目的是模拟某个环境过程。可以想象成一个模型,用来计算生态系统在不同温度下的反应。
这是我第一次在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 个回答
这个问题主要是个人观点,不过我来试试回答。
如果你不想让用户访问常量,只想让他们访问参数,那你现在的做法基本上是对的(一个文件存常量,另一个文件存参数)。
如果你不介意用户可以更改常量,我建议你可以把所有设置放在一个叫做 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
来调用成绩类型常量。注意,上面的代码更像是伪代码,因为模型主要依赖于你使用的框架或库,但你大概明白我的意思了。