在Python中向函数传递太多参数

2024-05-14 19:57:07 发布

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

我正在开发一个程序,该程序对渗滤系统进行蒙特卡罗模拟(使用python)。为了能够从GUI(tkinter)运行它并使用多个进程,我在main()函数中定义了模拟的主要部分。问题是,这个程序是一个物理模拟,它需要很多参数(10+)。从main()调用的一些函数也需要很多参数,并且会被多次调用。例如,在我的main()中,我有一个generate_wire()函数,它接受8个参数,例如wires_mean_length、wires_distribution等。这个函数被调用了数百万次

这会影响项目的效率吗?这是应该修复的吗?如果是,如何修复

编辑:代码的结构基本如下:

def generate_wire("8 parameters"):
     "generating a wire according to the parameters"

def main("main parameters"):
     for _ in range(nbr_sim):
         while True:
         generate_wire("8 parameters taken from the main parameters")
         "Various calculations"
         if percolation is True:
             break

if __name__ == '__main__':
     "GUI code"
     "Run button calls the main function with parameters from GUI entries"


Tags: the函数from程序true参数ifmain
1条回答
网友
1楼 · 发布于 2024-05-14 19:57:07

实际上,与其他设计相比,这不会影响程序的运行时间

您可以将所有参数放入字典或自定义类中,并传递这些参数,以使逻辑更清晰

您可以将函数中的逻辑直接提升到循环中,这样可以减少查找的次数

More about local variable lookups

def generate_wire_wrapper("8 parameters"):
    for _ in range(nbr_sim):
        "logic to generate a wire"
        "various calculations"

def main("main parameters"):
    generate_wire_wrapper("8 parameters taken from the main parameters")

然而,改进设计将是您在这里的真正盟友

而不是在循环中调用成千上万次相同的函数,考虑

  • 使用某种pool of workers并行处理
  • 利用C语言中的逻辑(如果必须的话,也可以编写逻辑),使操作更加高效 科学图书馆的制图方法这样做是为了提高效率,其中一部分是通过每一步做更多的工作来规避GIL(例如,熊猫数据帧.apply方法就是这样做的)

相关问题 更多 >

    热门问题