gpt4 book ai didi

python - lambda 比 python 中的函数调用慢,为什么

转载 作者:行者123 更新时间:2023-12-02 11:40:54 25 4
gpt4 key购买 nike

我认为lambda比函数调用更快,但是经过测试,我发现我错了。函数调用肯定比 lambda 调用快。

谁能告诉我为什么?

如何加快Python中的函数调用速度?

我使用的是 Ubuntu 14.04 和 Python 2.7.6

>>> timeit('def a():return 222*333 ;a()')
0.08195090293884277
>>> timeit('a=lambda:222*333 ;a()')
0.11071300506591797

>>> timeit('a=lambda: [].extend(range(10)) ;a()')
0.40241098403930664
>>> timeit('a=lambda: [].extend(range(10)) ;a()')
0.4011270999908447
>>> timeit('a=lambda: [].extend(range(10)) ;a()')
0.4064619541168213
>>> timeit('def a(): return [].extend(range(10)) ;a()')
0.07965493202209473
>>> timeit('def a(): return [].extend(range(10)) ;a()')
0.08039593696594238
>>> timeit('def a(): return [].extend(range(10)) ;a()')
0.08103609085083008
>>> timeit('def a(): return [].extend(range(10)) ;a()')
0.08639097213745117
<小时/>

抱歉我的错误,没有区别。正确测试:

>>> timeit('a()', setup="def a():return 222*333")
0.07061290740966797
>>> timeit('a()', setup="a=lambda: 222*333")
0.06967616081237793

最佳答案

timeit('def a(): return [].extend(range(10)) ;a()') 未调用 a();对 a() 的调用是 a 定义的一部分:

In [34]: def a(): return [].extend(range(10)) ;a()

In [35]: import dis

In [36]: dis.dis(a)
1 0 BUILD_LIST 0
3 LOAD_ATTR 0 (extend)
6 LOAD_GLOBAL 1 (range)
9 LOAD_CONST 1 (10)
12 CALL_FUNCTION 1
15 CALL_FUNCTION 1
18 RETURN_VALUE
19 LOAD_GLOBAL 2 (a)
22 CALL_FUNCTION 0 #<-- a is called
25 POP_TOP
<小时/>

如果单独测试各个部分,差异可以忽略不计:

In [24]: %timeit a=lambda: [].extend(range(10))
10000000 loops, best of 3: 68.6 ns per loop

In [25]: %timeit def a2(): return [].extend(range(10))
10000000 loops, best of 3: 68.8 ns per loop

In [22]: %timeit a()
1000000 loops, best of 3: 445 ns per loop

In [23]: %timeit a2()
1000000 loops, best of 3: 442 ns per loop

关于python - lambda 比 python 中的函数调用慢,为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26540885/

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