lambda is slower than function call in python, why

前端 未结 3 1433
清酒与你
清酒与你 2021-02-20 18:20

I think lambda is faster than function call, but after testing, I find out that I am wrong. Function call is definitely faster than lambda call.

Can anybody tell me why

3条回答
  •  没有蜡笔的小新
    2021-02-20 18:58

    timeit('def a(): return [].extend(range(10)) ;a()') is not calling a(); The call to a() is part of the definition of 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             
    

    If you test the pieces separately, the difference is negligible:

    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
    

提交回复
热议问题