为什么将一行代码拆分成(做很多事情)成许多更小的行 运行 *so* 慢得多

Whey does splitting a line of code into (that does many things) into many smaller lines run *so* much slower

这些都在 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 倍。我对这种程度的放缓感到惊讶 - 我错过了什么,这仅仅是任何操作的成本超过了特定操作的成本吗?

每次给val1、val2、val3赋新值时,都需要写在某处。然后,需要访问它才能得到你想要的。 如果你的列表嵌套很深,调用了 130k+ 次,每次都需要从所述变量中获取值,这会导致性能下降。