Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

きっかけ

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

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

ukisoft
まったり developer です。python と js を使うことが多いです。
rymansat
普段は宇宙開発に関わっていないサラリーマンが身近で誰でもできる宇宙開発を実現させることがリーマンサット・プロジェクト(Ryman Sat Project=rsp.)の目的です。キューブサットの開発をはじめ、宇宙を軸として様々なコミュニティやクリエイターとコラボレーションし、民間宇宙開発に関するネットワークを強化、拡張することを目指して活動しています。
https://www.rymansat.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした