paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

Python3.7.0がリリースされたので、気になった新しい機能&改善点まとめ

f:id:paiza:20180628174753j:plain
秋山です。

Python 3.7.0が一昨日リリースされましたね!

What’s New In Python 3.7 — Python 3.7.0 documentation

何が変わったのかしらんということで、いろいろドキュメントを読んだり実際に試したりしてみましたが、ざっくり言うと型ヒント関係のアップデート、速度改善、asyncioの改善などがありました。

今回はPython 3.7.0で気になった新しい機能&改善点を書いてみます。

■型ヒント関連

型ヒント等のためにいろいろ整備されたっぽいです。

  • PEP 560

www.python.org
__class_getitem__, __mro_entries__ が追加されました。今までメタクラスでやっていたクラスの添字処理のオーバーヘッドを減らせる(typingのimportが7倍速くなった!)&メタクラスの競合やバグが危険なときがあるかも…ということで追加されています。

  • PEP 561

www.python.org
型情報の配布や利用周りのルールが決められています。

  • PEP 563

www.python.org
アノテーションの遅延評価関連です。

これは、型ヒントが評価されるタイミングの問題で前方参照ができなかったのが直りました。前方参照できるようになって、自分自身を返す・受け取るといったクラスも自然に書けるようになった感じです。

class Foo:

    def __init__(self, n: int):

        self.n = n



    def foo(self, params: Foo) -> Foo:

        return params



foo_10 = Foo(10)

foo_20 = Foo(20)

foo_foo = foo_10.foo(foo_20)

print(foo_foo.n)

↑Foo自身内で、型ヒントでFooを使いたいとなったときに、これでは動きません。

ただし互換性に影響があるので、 from __future__ import annotations をインポートする必要があります。(Python4.0では標準になるっぽいです)

■速度改善関連

Linuxで10%速度改善、MacOSでは30%改善など。あとは先に書きましたが、PEP 560でtyping(型ヒント)のimportにかかる時間が7分の1になったようです。
https://docs.python.org/3.7/whatsnew/3.7.html#optimizations

ほかにも、ソートが40~75%高速化(一般的なケースへの最適化なので、偏ってる場合とかはどうなんだろう…というのはありそう)、dict.copy()が最大5.5倍高速化、正規表現やUnicodeの検索なども高速化しているようです。

このへんは、いろいろなプログラムが影響を受けて地味に高速化できそうな感じですね。

■その他

dictの挿入順保証が宣言されていますね。なんとなく手元で調べてみたら、3.6.0からしれっと挿入順になっていました。

3.5.2とかで試してみたら挿入順ではなかったですが、明確に宣言されたのは3.7.0からなので、一応知っておいたほうがよいかと思います。

他には、Pythonドキュメントの翻訳に関するPEPも書かれてます。

  • PEP 545

www.python.org
日本語版とフランス語版と韓国語版に関する記載があります。翻訳チームの方に感謝しつつ参考にしたいですね。

あとは asyncio 周りの改善が大きなところでしょうか。
https://docs.python.org/3.7/whatsnew/3.7.html#asyncio

dataclasses というのが追加されていますが、 __eq__ などがいい感じに同じ dataclass 同士の比較をしてくれるようです。使い道ありそう。
https://docs.python.org/3.7/whatsnew/3.7.html#dataclasses

■まとめ

というわけで、Python 3.7.0の変更点について書いてみました。

型ヒント関連の改善とかは、個人的にはうれしいですね。

細かく見るとほかにもいろいろな変更が入っているかと思うので、詳しく知りたい人は公式ドキュメントを見てみましょう。

What’s New In Python 3.7 — Python 3.7.0 documentation


ほかにもPythonや機械学習などに関する記事をいろいろ書いているので、興味のある方は見てみてください。
paiza.hatenablog.com
paiza.hatenablog.com


「Pythonを使えるようになりたい!」という方は、プログラミングが動画で学べる「paizaラーニング」の「Python入門編」(今年から全編無料になりました)から始めてみてください。先日新しく「Python入門編7: 関数を理解しよう」が追加されました。

paizaラーニング



 

paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング

そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

詳しくはこちら

paizaのスキルチェック