Python列表拆包,这很贵吗?它效率低下吗?

时间:2016-06-14 00:15:08

标签: python

假设我有一个返回多个元素的Python函数,例如myfoo0()

def myfoo0():
   return([1, 2, 3])

并且用作:

fit = myfoo0();

现在,考虑一个使用fit的某些条目作为输入的函数。例如:

def myfoo1(fit):
   [a, b, c] = fit
   return(doSomething(a))

现在,如果我把它写成:

,我觉得更容易阅读
fit = myfoo0();
out = myfoo1(fit)

(例如,我有许多函数myfoo1,...,myfoon,每个函数使用fit的不同组件 我的问题是上面的代码(fit的正文中myfoo1的条目的命名)如何比较(从性能的角度)到这个代码:

[a, b, c] = myfoo0();
out = myfoo2(a)

其中

def myfoo2(a):
   return(doSomething(a))

特别是,在函数内部使用元组解包的解决方案会产生很大的额外成本(例如在复制方面)吗?

1 个答案:

答案 0 :(得分:2)

这里有一些误解:

  1. fit = myfoo0();不会复制任何内容。 fit仅仅是对myfoo0()返回的列表的引用,而不是副本。

  2. [a, b, c] = myfoo0();也不会创建新列表。另一方面,你有3个变量分别引用第一,第二和第三个列表成员。

  3. out = myfoo1(fit)myfoo1(a)不同。第一个调用使用作为第一个参数传递的列表调用myfoo1,第二个调用调用myfoo1,第一个列表成员作为第一个参数传递。