微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Python中将过多的参数传递给函数

如何解决在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"

解决方法

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

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

您可以将函数中的逻辑直接提升到循环中,这将使查找的频率降低

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(例如,Pandas dataframes .apply方法可以做到这一点)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。