我需要根据单个用户输入分配几个变量。我的代码已经有机地演变成以下结构,我想升级到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")
所以我们的目标是将所有'类型'信息放在一个地方,这样如果其他用户想要添加更多信息,那么它就会在代码中的一个位置上进行添加。我还想使用一种通用方法,以便在模拟变得更复杂时随后轻松添加其他功能。
答案 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()