gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:26 24 4
gpt4 key购买 nike

背景


  • 我在一个项目中有两个文件。 '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、数据类、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)而不是字典(例如 p["z"]["P1HHSet"]) 或索引(例如 p[0][0])语法。

这是否回答了您的问题?

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com