Python lambda函数是否有助于减少执行时间?

时间:2018-12-01 07:58:43

标签: python lambda

可以理解, Python lambda functions 可帮助创建匿名函数。这些可以在排序函数中的其他函数中使用,例如map(),reduce(),filter()和key()。它也可以用来演示和利用词汇闭包。

我想在这里具体了解的是,lambda函数在执行时间方面是否比常规函数具有特定优势,并且考虑所有其他因素不变

由于我是Python的新手,所以我试图通过将它们与C ++的内联函数进行类似的比较来理解它们。从C ++可以理解,内联函数可以节省时间,因为它们不需要与在函数调用和跳转过程中发生的上下文切换有关的必要“内务处理”。
与常规函数相比,Python Lambda函数是否具有类似的优势?

一些相关的帖子对我的问题有用但不一定有用: Why are Python lambdas useful? Why use lambda functions?

1 个答案:

答案 0 :(得分:39)

不。 lambda生成的功能对象的行为与def生成的功能对象完全相同。它们不会更快地执行。 (此外,现代C ++中的inline不再是告诉编译器内联函数的指令,与内联无关。)

如果需要,可以查看lambda和等效的def的字节码反汇编:

import dis

dis.dis(lambda x: x + 2)

print()
def f(x): return x + 2

dis.dis(f)

Output

  3           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (2)
              6 BINARY_ADD
              7 RETURN_VALUE

  6           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (2)
              6 BINARY_ADD
              7 RETURN_VALUE

没有区别。您还可以为它们计时:

import timeit

def f(x): return x + 2
g = lambda x: x + 2

print(timeit.timeit('f(3)', globals=globals()))
print(timeit.timeit('g(3)', globals=globals()))

Output

0.06977041810750961
0.07760106027126312

lambda实际上在此运行中花费了更长的时间。 (关于我们是否安排足够的时间来有意义的工作,评论中似乎有些困惑。timeit默认将定时语句包装在million-iteration loop中,所以是的。)

在您询问之前,lambda也不比def在性能上有劣势。以上比赛的获胜者基本上要靠运气。不过,lambdadef与完全避免使用回调函数相比,确实具有明显的劣势。例如,map-with-lambda相对于列表理解有明显的性能损失:

import timeit

print(timeit.timeit('list(map(lambda x: x*x, range(10)))'))
print(timeit.timeit('[x*x for x in range(10)]'))

Output

1.5655903220176697
0.7803761437535286

无论是lambda还是def,Python函数的调用成本都很高。