きっかけ
pythonで開発してるツールが遅いので、何とかして早くしたいなと思っている毎日だったのですが、Cython ―Cとの融合によるPythonの高速化という本を見かけたので、読んでみることに。
で、まだ数ページしか読んでないのですが、Cのように静的型付けができることが、高速化の要因の1つであるような雰囲気を感じました。
でも、最近、pythonはtype hintsできるようになりましたよね?(Python 3.5の新しい言語機能とライブラリモジュール)
PyCharmとか使った時に、警告出してくれる便利機能くらいにしか考えてなかったんですけど、実はtype hints使うと処理速度も上がっちゃったりするんですかね?
というわけで、簡単な速度比較をしてみました。
速度比較
テストコードはこちら。
from datetime import datetime
def fib1(n): # type hintsなし
if n == 0:
return 0
return n + fib1(n -1)
def fib2(n: int) -> int: # type hintsあり
if n == 0:
return 0
return n + fib2(n -1)
print(datetime.now())
print(fib1(100))
print(datetime.now())
print(fib2(100))
print(datetime.now())
出力結果がこちら。
2015-09-28 18:59:51.027626
5050
2015-09-28 18:59:51.027720
5050
2015-09-28 18:59:51.027758
hype hintsなしが約0.0001秒、ありが約0.00004秒で、確かに倍くらい速くなっている!!!!
と思ったけど(追記)
@yuki2006さんのコメントの通り、実行の順番を変えたら結果も変わってしまいました。。。
コメントありがとうございます。
print(datetime.now())
print(fib2(100))
print(datetime.now())
print(fib1(100))
print(datetime.now())
2015-09-28 19:55:23.554259
5050
2015-09-28 19:55:23.554357
5050
2015-09-28 19:55:23.554405
感想
テンション上って勢い良く記事にしてみたので、至らぬところもあるかと思いますが(そもそも本読みきってないし)、そこはかとなくtype hintsに可能性を感じました。
検証系の記事を書くときは、もっと色んな角度で調べた後、冷静になって記事を書くことを学びました。