Python:使用函数导入许多变量

标签 python import

背景


  • 我的项目中有两个文件。 “main.py”和“auxillary_functions.py”。 “main.py”包含基本代码,另一个文件包含支持信息。
  • 在主文件中,我迭代了几个案例。对于每种情况,我都必须初始化大量参数,例如

    for i in range(10):
    
       zP1HHSet, zH1HHSet, zISHHSet, zEEHHSet = [], [], [], []
    
       dP1HHSet, dH1HHSet, dISHHSet, dEEHHSet = [], [], [], []
    
       mP1HHSet, mH1HHSet, mISHHSet, mEEHHSet = [], [], [], []
    
       nP1HHSet, nH1HHSet, nISHHSet, nEEHHSet = [], [], [], []
    
       kP1HHSet, kH1HHSet, kISHHSet, kEEHHSet = [], [], [], []
    
       tP1HHSet, tH1HHSet, tISHHSet, tEEHHSet = [], [], [], []
    
       a_IS = 0
       b_IS = 10401
       and so on
    

这是我需要为每次运行初始化的参数的小子集



问题

我想做的是编写一个函数,比如 foo:

def foo(case):

    zP1HHSet, zH1HHSet, zISHHSet, zEEHHSet = [], [], [], []

    dP1HHSet, dH1HHSet, dISHHSet, dEEHHSet = [], [], [], []

    mP1HHSet, mH1HHSet, mISHHSet, mEEHHSet = [], [], [], []

    nP1HHSet, nH1HHSet, nISHHSet, nEEHHSet = [], [], [], []

    kP1HHSet, kH1HHSet, kISHHSet, kEEHHSet = [], [], [], []

    tP1HHSet, tH1HHSet, tISHHSet, tEEHHSet = [], [], [], []

我知道的一个选择是一一返回所有变量,然后将它们解压到主文件中。 有没有更好的方法来处理这个问题?



问题

如何导入大量变量?简而言之,我想通过将这组行转移到另一个文件来减少主要代码的大小。



最佳答案

如果您的参数具有结构(在您的示例中似乎就是这种情况),那么最好以结构化方式存储它们,而不是“扁平”作为一堆变量。然后,该结构可以轻松地由函数返回或作为参数传递。在 Python 中构建结构有很多不同的选项(列表、字典、namedTuples、数据类、简单命名空间……)。使用 SimpleNamespaceNamedTuple 的一种可能的解决方案可能如下所示:

from types import SimpleNamespace
from typing import NamedTuple, List

class ParamSet(NamedTuple):
    P1HHSet: List
    H1HHSet: List
    ISHHSet: List
    EEHHSet: List


def foo(case):
    return SimpleNamespace(
        z=ParamSet([], [], [], []),
        d=ParamSet([], [], [], []),
        m=ParamSet([], [], [], []),
        n=ParamSet([], [], [], []),
        k=ParamSet([], [], [], []),
        t=ParamSet([], [], [], []),
    )


if __name__ == "__main__":
    p = foo(None)

    # access members using attribute syntax
    print(p.z.P1HHSet)
    print(p.k.ISHHSet)

请注意,这仅适用于足够新的 Python 版本。使用 NamedTupleSimpleNamespace 的优点是可以使用方便的属性语法(例如 p.z.P1HHSet)而不是字典(例如 p["z"]["P1HHSet"]) 或索引(例如 p[0][0])语法。

这能回答你的问题吗?

关于Python:使用函数导入许多变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53649551/

相关文章:

python - 获得列中 n 最小总和的组

python - Odoo - 为特定用户隐藏按钮

python - DHT22传感器导入Adafruit_DHT错误

ruby - 如何从 Ruby 模块中只导入几个函数?

mysql - 续集专业版 : How to change a string to a date during import?

Python Child 不能使用 Parent 导入的模块

python - Pandas DataFrame 到字典的转换

python - 为什么 PyCharm 会警告可变的默认参数?我该如何解决它们?

php - 在集合上使用聚合函数实现类似 SQL 的分组依据的算法?

Python 2.7 运行 py 时找不到模块。但可以在终端中找到模块