gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:12:02 25 4
gpt4 key购买 nike

据了解,Python lambda functions 有助于创建匿名函数。这些可以用于排序函数中的其他函数,如 map()、reduce()、filter() 和 key()。它也可以用来演示和利用词法闭包。

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

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

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

最佳答案

没有。 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 中,所以是的,我们是。)

在您问之前,不,lambdadef 相比也没有性能劣势。上述比赛的获胜者基本上取决于运气。不过,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 函数的调用成本都很高。

关于python - Python lambda 函数是否有助于减少执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53568926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com