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

2024-10-16 17:19:26 发布

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

背景


  • 我在一个项目中有两个文件主.py'和'辅助_函数.py'. '主.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 = [], [], [], []

我知道的一个选项是逐个返回所有变量,然后在主文件中解压它们。 有没有更好的办法来处理这个问题?你知道吗



问题

如何导入大量变量?简而言之,我想通过将这组行传输到另一个文件来减小主代码的大小。你知道吗




Tags: 文件函数代码py参数mh1hhsetdishhsetmp1hhset
3条回答

您可以直接在全局/局部符号表上工作 例如

globals()[ variable_name ] = variable_value
locals()[ variable_name ] = variable_value

如果您的参数有一个结构(在您的示例中似乎是这样),那么最好以结构化的方式存储它们,而不是将它们“扁平”地存储为一堆变量。这个结构可以很容易地由函数返回或作为参数传递。在Python中构建结构有很多不同的选项(列表、dict、namedTuples、数据类、simpleNamespaces等等)。使用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)而不是dict(例如p["z"]["P1HHSet"])或index(例如p[0][0])语法来访问各个参数。你知道吗

这能回答你的问题吗?你知道吗

你可以把所有的变量放在一个单独的文件中,比如说'Auxilary'_函数.py'. 在主文件中,可以使用*导入所有变量。档案辅助_函数.py'应与'主.py'. 你知道吗

在'主.py“你可以这样做。你知道吗

import * from auxillary_functions

相关问题 更多 >