大多数pythonic方式基于单个输入分配多个值

时间:2016-02-03 21:37:50

标签: python database class

我需要根据单个用户输入分配几个变量。我的代码已经有机地演变成以下结构,我想升级到pythonic。

build sim1 from scratch, type='startup'
run sim1
build sim2 from sim1 results, type='running'
run sim2
build sim3 from sim2 results, type='shutdown'
run sim3
build sim4 from sim3 results, type='startup'
run sim4
build sim5 from sim4 results, type='Accident Scenario 1'

我的模拟最终可能会有几种类型,而其他用户可能希望稍后添加自己的类型(或变量)。任何人都可以建议一种高度pythonic的方式来为后代设置这个吗?

到目前为止,我已经考虑构建一个巨大的矩阵(numpy?pandas?),或者因为我最近发现了OOP的乐趣,可能会用类来做一些聪明的事情。

编辑:要求对项目进行澄清。我正在为迭代fortran代码生成输入层,其中main()将具有以下形式:

=IF(AND(A2=Sheet1!$A$2,A3=Sheet1!$A$3),A4,"x")

所以我们的目标是将所有'类型'信息放在一个地方,这样如果其他用户想要添加更多信息,那么它就会在代码中的一个位置上进行添加。我还想使用一种通用方法,以便在模拟变得更复杂时随后轻松添加其他功能。

1 个答案:

答案 0 :(得分:0)

这个怎么样?您将为每个方案创建一个单独的函数(将相关数据保存在一起)。成本可能是使您的场景参数全局(在此处显示),或者可能将它们放入字典或使它们成为简单对象的属性:

def _build_sim_running():
    global var1, var2, ... varN
    var1 = 1
    var2 = math.pi
    # ...
    varN = 'this'

def _build_sim_starting():
    global var1, var2, ... varN
    var1 = 2
    var2 = 7.0/9
    # ...
    varN = 'is an'

def _build_sim_stopping():
   global var1, var2, ... varN
   var1 = 3
   var2 = 1e-6
   # ...
   varN = 'example'

Simulation_builder = {
    'startup': _build_sim_starting,
    'shutdown': _build_sim_shutdown,
    'running': _build_sim_running,
}

def build_simulation(type='running'):
    fn = Simulation_builder[type]
    fn()