149
139

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.

Python3.5の新機能

Last updated at Posted at 2015-09-12

はじめに

開発ロードマップ(PEP-478)によると正式リリースが9/13(おそらくUS時間)に予定されているPython 3.5。追加のリリース候補(rc4)が9/9にリリースされたこともあり、多少遅れる可能性もあるが、おそらくは一週間以内にでることであろう。ということで、Python3.5の変更点の日本語まとめ + 一言コメントをしてみた。元ネタはこちらの冒頭にある "Summary - Release Highlights"。

なお、Python3.5を試すには、最新のリリース候補をここからダウンロードすればよい。あるいはpyenvを使っている人はpyenv installで簡単に導入できるが、pyenvの最新版v20150901ではrc2までしかサポートされていないのでそれで我慢するか、pyenvをHEADから取ってくる必要がある。homebrewを使っている場合はこんな感じ。

brew uninstall pyenv # すでにインストールされている場合
brew install pyenv --HEAD
pyenv install 3.5.0rc4
2015/09/14追記

予定通り、3.5.0がリリースされました。正直、こんなに早く来ると思っていなかった..

pyenvも早速アップデートされて 20150913になり、3.5.0が正式サポートされました。Homebrewにもすでに上がっている。みんな仕事が早い! なので、お試しされたい方はこれで大丈夫になりました。

brew install pyenv # 若しくはインストール済みの人は brew upgrade
pyenv install 3.5.0

Python 3.5 リリースハイライト

新たな文法による機能 (New syntax features)

行列乗算オペレーター

PEP-465で提案されている、行列の乗算をa@bという形で書けるようにするという仕様追加。不思議なのは標準ライブラリではこれを使う実装は提供されず、仕様だけ。代わりにnumpyなどの幾つかの外部ライブラリが対応を表明している。

asyncとawaitによるコールーチン

PEP-492で提案されている、コールーチンを定義し利用するための仕様追加。これまでもGeneratorを使ってコールーチンを作成することは出来たが、よりわかりやすくするためにasyncとawaitというキーワードを導入して仕様拡張を行ったとのこと。

アンパッキングのさらなる一般化

PEP-448で提案されている、***を使った値の展開の機能拡張。print(*[1], *[2], 3)というように関数の引数として複数回使ったり、[*range(4), 4]のようにタプルやリスト、ディクショナリの中でも使えるようになる。

新たなライブラリモジュール (New library modules)

zipapp

Pythonはzipで固められたpythonコードを実行する機能を持っている。しかもv2.6の頃から! せっかくの機能なのに誰にも知られずに使われていない(私も知らなかった!)のはもったいないのでその機能を使いやすくしよう、という提案がPEP-441でされていて出来たツールがzipapp。Zipで固めたPythonコードを "Python Zip Application"と呼ぶことにして、それを作成するための機能などを提供する。

新たなビルトインの機能 (New built-in features)

BytesやBytearrayでの%によるフォーマッティング

これまでも、"%04x" % 10みたいな事はできたが、結果はstr型になる。それをb"%04x" % 10みたいな形でbytes型にもできるようにするという機能拡張。

Bytes、Bytearray、Memoryviewでのhexメソッドサポート

b'\xf0\x9f\x90\x8d'.hex()という様なことができるようになる。

memoryviewでtuple indexing

多次元の配列(行列)の要素にアクセスするのにtupleでindexingできるようになるみたい。

Generatorのgi_yieldfrom属性追加

これは必要性が今ひとつわかりませんでした...

新しい例外 RecursionError

RuntimeErrorの一種で、再帰の最大数を超えると発生する。

新しい例外 StopAsyncIteration

async for で作られた非同期Iterableで繰り返し終了時に上げる例外。

CPython実装

sys.stdin/sys.stdoutのエラーハンドラー変更

LC_TYPEがPOSIX locale (C locale)の場合に、sys.stdinとsys.stdoutはstrictエラーハンドラーではなく、surrogateescapeエラーハンドラーを使うようになる。

.pyoの廃止

Pythonを-Oあるいは-OOオプション付きで実行すると、最適化されたバイトコンパイル結果が.pycではなく.pyoファイルに格納されていた。Python 3.5からはそれを廃止し.pycファイルに格納することとし、最適化レベルはファイル名の中に記す(例えば xxx.cpython-35.opt-1.pycのように)(PEP-488)

エクステンションのマルチフェーズ初期化

これまでビルトインモジュールやエクステンションは生成と初期化を一気に行っていた。これを他のモジュール同様に、生成を全てのモジュールに対して最初に行い、その後初期化コードの実行という形に変更する。(PEP-489)

大幅に改善されたライブラリモジュール

OrderedDictのC実装化

collections.OrderedDictがCで再実装され、4倍から100倍速くなった!

tmpfileの改善

これまでstr型でしか渡せなかった引数(prefixの指定など)で、bytes型も使えるようになる。また、Noneを指定することもできるようになる。

sslモジュールの改善

Memory BIOサポートの追加。この変更により、SSLプロトコルの処理を実際のSocket I/O処理から切り離すことができる。

tracebackモジュールの改善

より軽量な TracebackException, StackSummaryおよびFrameSummaryクラスを追加

lru_cacheの改善

関数呼び出しの結果をキャッシュするデコレータとしてfunctools.lru_cacheが提供されていたが、これがC言語で再実装された。

セキュリティの改善

SSLv3廃止

ssl.SSLContextを使って利用可能にできるが、標準ライブラリからは全撤廃。この変更はv3.4およびv2.7にもバックポート済み。これはPOODLE攻撃と言われたSSLv3の脆弱性問題を回避するための処置でしょう。

Cookie処理の改善

インジェクション攻撃防止のため、Cookieのパーシングをより厳密に。

Windowsでの改善

MSIに代る新たなインストーラを導入

小さいインストーラで必要なファイルを適宜インストール時にダウンロードしてくるWeb Installerと標準のコンポーネントを全て含んでいる Offline installerの二種類を用意。それぞれ32bit版と64bit版がある。

MSVC++ 14.0の使用

Windows用Python 3.5はMSVC++ 14.0でビルドされていて、エクステンションもこれでコンパイルする必要あり。

最後に

上記で紹介したもの以外にもWhat’s New In Python 3.5にはいろいろと変更点が書かれている。面白そうなものや使えそうなものがあれば是非取り上げてみたい。

149
139
0

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
149
139

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?