2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonでtype hintsを使うと、処理速度が速くなる?

Last updated at Posted at 2015-09-28

きっかけ

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に可能性を感じました。

検証系の記事を書くときは、もっと色んな角度で調べた後、冷静になって記事を書くことを学びました。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?