函数参数过多Python

2024-06-26 10:41:45 发布

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

,我目前正在创建一个遗传模糊学习系统及其相应的训练仿真环境->;这个函数和类的集合由一个主脚本控制,用户在其中定义诸如:仿真场景、控制器特性等

结果是大约50个不同的numpy数组,并列出了我的特定问题的参数。这些参数必须提供给控制器生成函数,以及确定每个控制器有效性的模拟。此进程当前正在使用多进程.starmap_异步方法并行化每个控制器的适应度。所以我的主脚本用大约50个参数调用控制器生成,多进程用大约55个进程调用它的工人,工人用57个输入调用所有模拟文件。(我目前的理解是,对多进程使用这么多输入参数不会增加开销,因为它们只是指向数据的名称,而不是复制或重新初始化它。。。如果我错了,请告诉我!)在

我知道我可以用一个包含我所有参数的列表来替换我的50个参数,并且我可以在我的主脚本中使用全局变量来避免所有这些簿记工作。这些变量中有很多是不变的,但都是大数据结构,我不想计算不止一次。是否有其他方法,以及被认为是最可接受的方法?我希望避免在我的项目中每次调用都有10行参数。在

尽可能的残酷,一切都运行得很完美,但我的模拟只会变得越来越复杂,随着(非可选)参数的数量不断增加。 我删除了所有更具体的var名称,但下面是一个调用,我的主脚本运行:

    (opt_str,opt_fit) = Trainer(map_size,Targets,SAMS,SAMS_stat,AIS,AIS_stat,
                          B_mpammo,B_sdammo,Route,vel,B_range,A_range, S_range,B_flight,
                          A_flight, S_flight,... lots more)

在我的GA中我有:

^{pr2}$

以及SimWorker:

for p in range(start, stop):
    fitness[p] = Sim_T(map_size,Targets,SAMS,SAMS_stat,AIS,AIS_stat,
                            B_mpammo,B_sdammo,Route,vel,B_range,A_range,S_range,B_flight,
                            A_flight, S_flight,
                            ttr,ttb,ttcr,ttcb,pos,times,pop[p],... lots more)

Tags: 方法函数脚本名称map参数进程range
2条回答

如果您使用关键字参数,也就是**kwargs,那么您可以只传入所需数量的参数,而不需要不需要的参数。然后你的函数可以检查并获取它想要的。在

或者,创建一个表示状态的对象(我建议使用一个类),然后构建该对象并将其传递给函数。在

在面向对象编程的意义上,您应该明确地将所有这些参数封装到一个对象中。这个对象是一个裸字典还是一个更高级的对象是一个设计问题,应该仔细考虑。我们当然需要更多的信息来给出更具体的答案。在

相关问题 更多 >