python - 基于单个输入分配多个值的大多数 pythonic 方法

标签 python database class

我需要根据单个用户输入分配多个变量。我的代码已经有机地演变为以下结构,我想升级到更 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]

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

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

编辑:要求对该项目进行说明。我正在为迭代 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'

因此,我们的目标是将所有“类型”信息放在一个地方,这样如果其他用户想要添加更多信息,它们都在代码中的一个地方并且很容易添加。我还想使用一种通用方法,以便在以后模拟变得更加复杂时轻松添加其他功能。

最佳答案

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

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

关于python - 基于单个输入分配多个值的大多数 pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35188240/

相关文章:

python - 不知道如何使用distinct() django

python - Python 中的可移植性大列表

php - 一次将两个表中的信息读取为两种形式

python - 解析复杂的查询参数

objective-c - 输出正在调用方法的类的名称的最佳方式是什么?

ios - 从另一个类 objc 访问变量

javascript - 如何更改 Javascript 中的类变量?

python - 从连续跨度列表中获取覆盖最深的站点

sql-server - 自动将新数据从 MS Access 数据库导入 SQL Server

python - 如何为CNN输入python制作3维数组