如何解决在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 举报,一经查实,本站将立刻删除。