搜索
写经验 领红包

ags和kwags(ags和kwags是什么意思)

导语:Args vs kwargs:哪种是在 Python 中调用函数的最快方式?

你有没有想过使用关键字调用函数是否比没有关键字更慢?换句话说:哪个更快;位置参数( myfunc(&39;, 33)) 或kwargs ( myfunc(name=&39;, age=33))?

在这篇简短的文章中,我们发现是否值得牺牲传递关键字参数与按位置传递参数的可读性。我们用模块设置基准timeit并比较结果。没什么太复杂的;让我们编码吧!

功能

为了对函数调用的性能进行基准测试,我们首先需要一个可以调用的函数:

def  the_func ( arg1, arg2 ):    pass

函数无非包含一个pass意思,函数本身什么都不做。这确保我们可以挑出并比较我们调用函数的方式(即定位或使用 kwargs)。

基准测试脚本

接下来我们需要一些代码来多次调用该函数并记录该函数执行所花费的时间:

import timeitnumber = 25_000_000repeat = 10times_pos: [float] = timeit.repeat(stmt=&39;hello&39;world&34;, globals={&39;: the_func}, number=number, repeat=repeat)times_kwarg: [float] = timeit.repeat(stmt=&39;hello&39;world&34;, globals={&39;: the_func}, number=number, repeat=repeat)

这就是 timeit 模块的用武之地。我们使用 timeit.repeat 多次运行一个函数。 我们在 stmt 中定义函数调用,并将 stmt 中的 func 映射到我们之前使用全局字典定义的函数。 然后我们使用 repeat 参数重复实验多次。 我们最终得到一个包含 10 个浮点数的数组:每个浮点数代表函数调用运行了 2500 万次。

检查结果

使用下面的代码,我们获取 timeit 提供给我们的浮点数列表,并显示最小、最大和平均执行时间。

print(&34;)print(f&34;)print(f&34;)

完毕! 让我们做一些基准测试!

结果

结果在:

            min (s)   max (s)   avg (s)pos:        1.38941   1.72278   1.58808kwarg:      1.72834   1.76344   1.75132          min (s)   max (s)   avg (s)pos:      2.07883   2.77485   2.35694kwarg:    2.05186   3.05402   2.74669

似乎位置参数平均快了 0.39 秒或略高于 16.5%。 但是请注意,位置参数在调用函数 2500 万次时快了 0.39 秒。

这意味着选择位置参数而不是关键字参数可为您节省大约 16 纳秒; 光线穿过大约 4.8 米(16 英尺)距离所需的时间。

结论

让我们从主要结论开始:不要因为性能问题而停止使用 kwargs! 我个人喜欢使用关键字参数,因为它使我的代码保持可读性并减少混淆参数的变化。 在本文中,我们已经看到使用关键字参数带来的性能提升可以忽略不计。 以几纳秒的速度损失为代价追求可读性。

本文内容由小思整理编辑!