2012年9月11日

Python 3.3 が間もなくリリースされるので新機能を確認しておく

概要

Python 3.3 安定版が今月中にリリースされる予定。すでに rc2 までリリースされているので、新機能を確認しておこうと思う。

新機能の確認

What’s New In Python 3.3」で新機能が確認できる。
まだ、良く理解してない機能もある。機能が多すぎて全部は無理なので、とりあえず上からメモしておく。以下のメモは正しさは一切保証しない。

Virtual Environments

「virtualenv」として存在した、Pythonの環境を切り分ける機能と同等の物が「venv」機能として実装された。「pyvenv」コマンドがインストールされるので、「pyvenv」コマンドを利用するのが簡単そう。
本当はパッケージ管理ツールの「pysetup」も入るはずだったのだけど、品質が向上しなかったり等で今回は外された。正直「pysetup」がはいってない「pyvenv」だけだといまいちな印象になってしまっている。

Namespace Packages

Pythonでパッケージを作成するにはディレクトリ内に「__init__.py」を用意する必要があったが、不要になった。
Python 3 は Python 2 と import の動作が異なるので注意。

New memoryview implementation and buffer protocol documentation

Python 3 では buffer() が memoryview() に変更されて、かなりいろいろ変更されている。

Flexible String Representation

文字列は完全に UCS-4 対応している。文字列表現は Python 3.2 まではちょっと厳密すぎたのだけど、すこし緩くなった。

Reworking the OS and IO exception hierarchy

OS と IO の例外階層が整理されている。綺麗になってデバッグしやすい等、便利。

Syntax for Delegating to a Subgenerator

「yield from」が追加されて、これはとても便利。というか、この手の機能を必要とする人にはめちゃくちゃ便利。

Suppressing exception context

例外の中で例外出すときに「raise from」文法が追加されている。

Explicit Unicode literals

Python 2 では u'xxx' みたいにして Unicode literals を明示していたが、Python 3.2 までは明示せずに Unicode literals になったので u'xxx' の機能がなかった。Python 3.3 では u'xxx' 表現が復活、でも付けてもたいした意味はない。Python 2 との互換性維持等が目的。
地味に Python 2 でも Python 3 でも動作するソース作成しようとすると面倒だったので、この改善は良いと思う。

Qualified name for classes and functions

class と function にQualified name(修飾名)を取得できる「__qualname__」が増えた。

Key-Sharing Dictionary

いろいろと細かい事はあるのだけど、組み込みの dict(辞書)のメモリ効率が良くなり、早くなったと思っておけば良いような。

Function Signature Object

functionのシグニチャがオブジェクトになっている。「inspect.signature()」メソッドが増えたりしている。
かなり便利なのだけど、どのぐらいの人がこの機能を使うのかわからない。

Adding sys.implementation

「sys」モジュールに「sys.implementation」が増えた。

lzma

lzma に標準で対応した。bz2 も修正されている。

まとめ

機能が多すぎて力つきた。理解してない機能があるけど、手元の Python 2 でしか動作しない自作モジュールとかを移植しながら勉強しようと思う。

blog comments powered by Disqus