Pythonでfor文の中に自作の関数は定義できる?パフォーマンスやメモリの観点からはどう?
今回はPythonでfor文の中に自作の関数は定義することができるのかについてご紹介いたします。
Pythonでfor文の中に自作の関数は定義できる?パフォーマンスやメモリの観点からはどう?
結論から言うとPythonの仕組みとしては可能です。
表題のことが何のことを表しているかというと、下記のようにfor文の中に自作の関数を定義できるのか、定義したとしてパフォーマンスが悪くなったりメモリ的に非効率になるのかというのが今回の議題となります。
1 2 3 4 |
for elem1 in mylist: def function1(elem2): print(elem2 +'test') function1(elem1) |
結論から言ってこれは問題ないです。
関数をfor文の外に書いたsample1.pyとfor文の中に書いたsample2.pyを用意し、各コードでAtCoder上で実行したところ、メモリとパフォーマンスで違いはほとんど現れませんでした。
1 2 3 4 5 6 7 8 9 10 |
mylist = [] for i in range(1000000): mylist.append([i]) def function1(elem1): for elem2 in elem1: pass for elem1 in mylist: function1(elem1) |
終了コード 0
実行時間 787 ms
メモリ 122144 KB
1 2 3 4 5 6 7 8 9 |
mylist = [] for i in range(1000000): mylist.append([i]) for elem1 in mylist: def function1(): for elem2 in elem1: pass function1() |
終了コード 0
実行時間 819 ms
メモリ 122080 KB
しかし私はfor文の中で自作の関数を定義することはおすすめしません。
今回は簡単な処理で検証を行いましたが、複雑な処理ではまた違った結果が出る可能性もありますし、なんとなく気持ち悪さがあるので、自作の関数を定義するときはfor文の外を推奨したいです。
終わりに
今回はPythonでfor文の中に自作の関数は定義することができるのかについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません