1. ホーム
  2. python

Pythonで関数をネストするときにオーバーヘッドがあるか?

2023-11-02 06:44:57

質問

Pythonで、親関数の中に子関数がある場合、親関数が呼び出されるたびに子関数は "初期化"(作成)されるのでしょうか?別の関数内に関数をネストすることに関連するパフォーマンスのオーバーヘッドがありますか?

どのように解決するのですか?

はい、毎回新しいオブジェクトが作成されることになります。タイトなループの中にあるのでなければ、問題にはならないでしょう。プロファイリングすれば、問題かどうかがわかります。

In [80]: def foo():
   ....:     def bar():
   ....:         pass
   ....:     return bar
   ....: 

In [81]: id(foo())
Out[81]: 29654024

In [82]: id(foo())
Out[82]: 29651384