为啥将一行代码(可以做很多事情)分成许多较小的行运行 *so* 慢得多
Posted
技术标签:
【中文标题】为啥将一行代码(可以做很多事情)分成许多较小的行运行 *so* 慢得多【英文标题】:Whey does splitting a line of code into (that does many things) into many smaller lines run *so* much slower为什么将一行代码(可以做很多事情)分成许多较小的行运行 *so* 慢得多 【发布时间】:2020-09-18 19:22:51 【问题描述】:这一切都在 python 3 中。我有一行代码基本上可以做到这一点:
somefloat += someDict(someList(someIndex1)))(someIndex2)
本质上,我拥有的是一个字典列表,每个字典都包含多个指向浮点列表的条目。 someIndex1 和 someIndex2 不相关,都是整数。 someList 是一个字符串列表。
但是,当我将其拆分为下面时,它最终会慢得多:
val1 = someList(someIndex1)
val2 = someDict(val1)
val3 = val2(someIndex2)
somefloat += val3
我已经使用 kernprof 对上述内容进行了计时(它是大量嵌套的 - 超过 130,000 次调用)。结果如下:
案例 1 - 一个班轮:
案例 2 - 多线器:
所以你可以从上面看到,一个班轮比任何一个单独的单行略慢,但一个行比它的部分组合快几乎 4 倍。我对这种程度的放缓感到惊讶 - 我错过了什么,这仅仅是任何操作的成本超过了特定操作的成本吗?
【问题讨论】:
【参考方案1】:每次为 val1、val2 和 val3 分配新值时,都需要将其写入某处。然后,它需要被访问以获得你想要的东西。 如果您的列表嵌套很深,并且您调用它们 130k+ 次,则每次都需要从所述变量中获取值,这可能会导致性能下降。
【讨论】:
以上是关于为啥将一行代码(可以做很多事情)分成许多较小的行运行 *so* 慢得多的主要内容,如果未能解决你的问题,请参考以下文章