在python中将变量和函数作为单独的案例存储的选项有哪些?

时间:2018-12-27 00:46:13

标签: python

我正在用python编写数学模型,该模型有约20个输入参数,我将它们存储在一个单独的文件中。我有多个要评估/修改的案例。

每种情况都是一个“ .py”文件,其中包含变量和一些简单函数。将它们导入我的主要代码的最简便的方法是什么?

到目前为止,我一直在使用“ from CaseName import *”从案例中导入所有变量和函数。但是,这不适合于循环处理案件。

我已经看过使用importlib,但是我的代码的某些部分要求导入的变量是全局的。还有其他选择吗?

这是一个简化的示例。

Case1.py:

CaseName = "Case1"
a = 1.0
b = 1.0

def InitialConditions(x):
    return(10*x)

Case2.py:

CaseName = "Case1"
a = 2.0
b = 2.0

def InitialConditions(x):
    return(4*x**2)

MainCode.py:

from Case1 import *

RunCalculation(a,b)
etc....

1 个答案:

答案 0 :(得分:0)

使用classes

class Case1(object):
    def __init__(self, x):
        self.a = 1
        self.b = 1
        self.x = x

    def initial_condition(self):
        print(10 * self.x)  

# Initialize and use
case = Case1(x=3)
case.initial_condition()

# Rinse and repeat for all needed classes 

如果您开始在全局环境中乱扔杂物,则可能表明您应该使用类。如果您的任何模型共享大量的属性(输入参数)或方法(函数),请考虑使用inheritance扩展类。

例如,如果您的RunCalculation函数始终是相同的,那么创建一个包含它作为方法的父类,然后从中继承以生成您的个别案例可能会更有效,例如:< / p>

class ParentCase(object):
    def __init__(self, a, b, x):
        self.a = a
        self.b = b
        self.x = x

    def run_calculation(self):
        print(self.a + self.b + 35)

class Case1(ParentCase):
    def __init__(self, x):
        self.a = 1
        self.b = 1
        self.x = x

    def initial_condition(self):
        print(10 * self.x)

case = Case1(x=3)
case.run_calculation() #inherited method