大多数pythonic方法基于单个inpu分配多个值

2024-10-03 00:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

def build_simulation(type='running'):
  var1 = {'running': 1,       'starting': 2,       'stopping': 3}
  var2 = {'running': math.pi, 'starting': 7/9,     'stopping': 1e-6}
  varN = {'running': 'this',  'starting': 'is an', 'stopping': 'example'}

  return other_function(var1[type])+var2[type], text+varN[type]

我的模拟最终可能会有几个类型,其他用户可能希望稍后添加自己的类型(或变量)。有人能提出一个高度python的方式来为后代建立这个吗?你知道吗

到目前为止,我已经考虑建立一个巨大的矩阵(numpy?熊猫?)或者因为我最近发现了面向对象编程的乐趣,可能是在课堂上做了一些聪明的事情。你知道吗

编辑:要求澄清该项目。我正在为迭代fortran代码生成输入组,其中main()的形式如下:

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'

因此,我们的目标是将所有的“类型”信息放在一个地方,这样,如果其他用户想添加更多的信息,就可以在代码中的一个位置添加这些信息,而且很容易进行添加。我还想使用一种通用的方法,它可以使以后在模拟变得更复杂时添加附加功能变得更容易。你知道吗


Tags: run用户frombuild信息类型typerunning
1条回答
网友
1楼 · 发布于 2024-10-03 00:20:36

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

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()

相关问题 更多 >