中で関数を呼ぶときは、for文を使うよりリスト内包記法を使う方が処理が速い。たとえば、以下の2つのスクリプトを試してみる。
■1.py
def a():■2.py
return "a"
s = ""
for _ in range( 0, 30000000 ):
s += a()
def a():
return "a"
s = "".join( a() for _ in range( 0, 30000000 ) )
結果は以下。
■1.py
$ time python 1.py■2.py
real 1m45.563s
user 0m19.425s
sys 0m0.974s
$ time python 2.py後者の方が約60%の時間で処理できている。
real 1m4.801s
user 0m11.880s
sys 0m1.139s
ちなみに、以下のように関数呼び出しをなくしてみると・・・
■1.py
s = ""■2.py
for _ in range( 0, 30000000 ):
s += "a"
s = "".join( "a" for _ in range( 0, 30000000 ) )
結果はこれ。
■1.py
$ time python 1.py■2.py
real 0m14.904s
user 0m13.254s
sys 0m0.972s
$ time python 2.py逆に、後者の方が遅いという結果に。
real 0m35.092s
user 0m6.368s
sys 0m1.125s
「文字列の連結は遅くて.joinメソッドは速い」という問題では
ないみたい。ちゃんと調べるか・・・?