ラムダはPythonの関数呼び出しよりも遅いのはなぜですか

大切にする

ラムダは関数呼び出しよりも速いと思いますが、テストしたところ、自分が間違っていることがわかりました。関数呼び出しはラムダ呼び出しよりも間違いなく高速です。

誰か教えてもらえますか?

そして、Pythonで関数呼び出しを高速化する方法は?

Ubuntu14.04とPython2.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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonで0.0を追加するよりも遅い数でfloat()を呼び出すのはなぜですか?

分類Dev

関数を直接呼び出すよりも、goプラグインを介して関数を呼び出す方が速いのはなぜですか

分類Dev

このラップされた関数呼び出しが通常の関数よりも速いのはなぜですか?

分類Dev

特定のGuavaStopwatch.elapsed()呼び出しが他の呼び出しよりもはるかに遅いのはなぜですか?(投稿で出力)

分類Dev

クロージャの可変参照パラメータが関数呼び出しよりも長生きしないのはなぜですか?

分類Dev

インターフェースメソッドの呼び出しが具体的な呼び出しよりも遅いのはなぜですか?

分類Dev

関数の呼び出しはSendMessage()よりも高速ですか?

分類Dev

ダイナミックライブラリ関数へのこの呼び出しが非常に遅いのはなぜですか?

分類Dev

std ::ラムダキャプチャからラムダ内の関数呼び出しに移動できないのはなぜですか?

分類Dev

Threadのサブクラス化がThreadの呼び出しよりも非常に遅いのはなぜですか?

分類Dev

引数のない関数呼び出しがより速く実行されるのはなぜですか?

分類Dev

`constructor`呼び出しよりも` deconstructor`呼び出しが多いのはなぜですか?

分類Dev

コードを関数として呼び出す方が、Clozure Common lispで直接呼び出すよりも時間がかかるのはなぜですか?

分類Dev

ライブラリの呼び出しは、独自のコードを使用するよりも遅いですか?

分類Dev

この非同期ラムダ関数の呼び出しがC#でコンパイルされないのはなぜですか?

分類Dev

カスタム関数が組み込み関数よりも遅いのはなぜですか?

分類Dev

このプログラム内で想定されているように関数呼び出しが実行されないのはなぜですか?

分類Dev

呼び出されたときにラムダが何もしないように見えるのはなぜですか?

分類Dev

関数を呼び出せないのはなぜですか?

分類Dev

ラムダIntStream.anyMatch()がナイーブな実装よりも10遅いのはなぜですか?

分類Dev

await lambda.invoke関数がラムダを複数回呼び出すのはなぜですか?

分類Dev

関数をタイムアウトしたときに遅延オブジェクトが呼び出されないのはなぜですか?

分類Dev

node.jsで、関数の2番目の呼び出しにかかる時間が最初の呼び出しよりも大幅に短いのはなぜですか?

分類Dev

Rのsplit関数の呼び出しでmagrittrパイプの代わりに明示的なフォームを使用できないのはなぜですか?

分類Dev

パンダが私のものよりも遅いのはなぜですか?

分類Dev

JavaScriptES6関数呼び出しが期待どおりに機能しないのはなぜですか

分類Dev

括弧なしでラムダ式を呼び出せないのはなぜですか?

分類Dev

UUID.randomUUID()の最初の呼び出しが遅いのはなぜですか?

分類Dev

この len(s) の呼び出しが遅いのはなぜですか?

Related 関連記事

  1. 1

    Pythonで0.0を追加するよりも遅い数でfloat()を呼び出すのはなぜですか?

  2. 2

    関数を直接呼び出すよりも、goプラグインを介して関数を呼び出す方が速いのはなぜですか

  3. 3

    このラップされた関数呼び出しが通常の関数よりも速いのはなぜですか?

  4. 4

    特定のGuavaStopwatch.elapsed()呼び出しが他の呼び出しよりもはるかに遅いのはなぜですか?(投稿で出力)

  5. 5

    クロージャの可変参照パラメータが関数呼び出しよりも長生きしないのはなぜですか?

  6. 6

    インターフェースメソッドの呼び出しが具体的な呼び出しよりも遅いのはなぜですか?

  7. 7

    関数の呼び出しはSendMessage()よりも高速ですか?

  8. 8

    ダイナミックライブラリ関数へのこの呼び出しが非常に遅いのはなぜですか?

  9. 9

    std ::ラムダキャプチャからラムダ内の関数呼び出しに移動できないのはなぜですか?

  10. 10

    Threadのサブクラス化がThreadの呼び出しよりも非常に遅いのはなぜですか?

  11. 11

    引数のない関数呼び出しがより速く実行されるのはなぜですか?

  12. 12

    `constructor`呼び出しよりも` deconstructor`呼び出しが多いのはなぜですか?

  13. 13

    コードを関数として呼び出す方が、Clozure Common lispで直接呼び出すよりも時間がかかるのはなぜですか?

  14. 14

    ライブラリの呼び出しは、独自のコードを使用するよりも遅いですか?

  15. 15

    この非同期ラムダ関数の呼び出しがC#でコンパイルされないのはなぜですか?

  16. 16

    カスタム関数が組み込み関数よりも遅いのはなぜですか?

  17. 17

    このプログラム内で想定されているように関数呼び出しが実行されないのはなぜですか?

  18. 18

    呼び出されたときにラムダが何もしないように見えるのはなぜですか?

  19. 19

    関数を呼び出せないのはなぜですか?

  20. 20

    ラムダIntStream.anyMatch()がナイーブな実装よりも10遅いのはなぜですか?

  21. 21

    await lambda.invoke関数がラムダを複数回呼び出すのはなぜですか?

  22. 22

    関数をタイムアウトしたときに遅延オブジェクトが呼び出されないのはなぜですか?

  23. 23

    node.jsで、関数の2番目の呼び出しにかかる時間が最初の呼び出しよりも大幅に短いのはなぜですか?

  24. 24

    Rのsplit関数の呼び出しでmagrittrパイプの代わりに明示的なフォームを使用できないのはなぜですか?

  25. 25

    パンダが私のものよりも遅いのはなぜですか?

  26. 26

    JavaScriptES6関数呼び出しが期待どおりに機能しないのはなぜですか

  27. 27

    括弧なしでラムダ式を呼び出せないのはなぜですか?

  28. 28

    UUID.randomUUID()の最初の呼び出しが遅いのはなぜですか?

  29. 29

    この len(s) の呼び出しが遅いのはなぜですか?

ホットタグ

アーカイブ