What's New In Python 3.4
************************

著者:
   R. David Murray <rdmurray@bitdance.com> (編集者)

この記事では 3.3 と比較した Python 3.4 の新機能を解説します。 Python
3.4 は2014年3月16日にリリースされました。全詳細については 変更履歴 を
ご覧ください。

参考: **PEP 429** -- Python 3.4 リリーススケジュール


概要 -- リリースハイライト
==========================

新たな文法機能:

* Python 3.4 に追加された新しい文法機能はありません。

その他の新しい機能:

* pip が常に利用可能であることが保障されるようになりました (**PEP
  453**)。

* 新しく作成されたファイル記述子が継承不可能 （non-inheritable） にな
  りました (**PEP 446**)。

* 隔離モード (isolated mode) の為のコマンドラインオプション
  (bpo-16499)。

* 非テキストエンコーディングでの Codec 処理の改良  (複数の issue に関
  係).

* インポートシステムのための ModuleSpec 型  (**PEP 451**).  (インポー
  ターの作者に影響します)

* "marshal" フォーマットが よりコンパクトで効率的に なりました
  (bpo-16475)。

新たなライブラリモジュール:

* "asyncio": 非同期 IO のための新たな暫定 API (**PEP 3156**)。

* "ensurepip": pip インストーラのブートストラップ (**PEP 453**)。

* "enum": 列挙型のサポート (**PEP 435**)。

* "pathlib": オブジェクト指向のファイルシステムパス (**PEP 428**)。

* "selectors": 高水準で効率的な I/O の多重化、"select" モジュールプリ
  ミティブを基にしています (**PEP 3156** の一部)。

* "statistics": 基礎的な 数値的に安定な統計ライブラリ (**PEP 450**)。

* "tracemalloc": Python のメモリ割り当てのトレース (**PEP 454**)。

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

* "functools" の シングルディスパッチジェネリック関数 (**PEP 443**)。

* "pickle" の新しい プロトコル 4 (**PEP 3154**).

* "multiprocessing" が Unix で os.fork の使用を避けるオプションを持つ
  ようになりました (bpo-8713)。

* "email" にサブモジュール "contentmanager" が追加され、また、
  "Message" のサブクラス ("EmailMessage") が追加されました。これは
  MIME 処理を簡単にします 。 (bpo-18891)

* "inspect" と "pydoc" が以前よりも遥かに幅広い種類の callable オブジ
  ェクトを正しくイントロスペクション出来るようになり、これは Python
  "help()" システムを改善することになりました。

* "ipaddress" モジュール API は安定だと宣言されました。

セキュリティの改善:

* 安全で取り替え可能なハッシュアルゴリズム (**PEP 456**)。

* ファイル記述子が子プロセスにリークするのを防ぐために 新しく作成され
  たファイル記述子が継承不可になりました (**PEP 446**)。

* 隔離モード (isolated mode) のための新たなコマンドラインオプション
  (bpo-16499)。

* "multiprocessing" が Unix で os.fork の使用を避けるオプション を持つ
  ようになりました。 子プロセスとのデータ共有を避けるため *spawn* と
  *forkserver* はより安全です。

* Windows での "multiprocessing" 子プロセスはもはや、必要なものを除い
  て親の継承可能なハンドルを継承しません。

* 新たな関数 "hashlib.pbkdf2_hmac()" は PKCS#5 パスワードベースの鍵導
  出関数２ を提供します。

* "ssl" での TLSv1.1、 TLSv1.2 サポート の追加。

* "ssl" での Windows のシステム証明書ストアよりの証明書抽出サポート の
  追加。

* "ssl" での サーバサイド SNI (Server Name Indication) サポート の追加
  。

* "ssl.SSLContext" クラスに 多数の改善 がなされました。

* SSL をサポートする全ての標準ライブラリモジュールは今や、ホスト名のマ
  ッチング ("ssl.match_hostname()") と証明書失効リスト
  (CRLs=certification revocation lists。
  "ssl.SSLContext.load_verify_locations()" 参照) を含むサーバ証明書検
  証をサポートします。

CPython の実装の改善:

* オブジェクトの安全なファイナライゼーション (**PEP 442**)。

* **PEP 442** を活用することで、ほとんどのケースで モジュールのグロー
  バルがファイナライゼーション中に None がセットされることはなくなりま
  した  (bpo-18214)。

* 設定可能なメモリアロケータ (**PEP 445**)。

* Argument Clinic (**PEP 436**)。

以降は、たくさんのほかの小さな改善、CPython での最適化、非推奨リスト、
潜在的な移植性問題を含む、ユーザ向けの変更の包括的なリストになっていま
す。


新しい機能
==========


PEP 453: Python インストール時の PIP の明示的なブートストラッピング
-------------------------------------------------------------------


デフォルトでの pip のブートストラッピング
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

新しい "ensurepip" モジュール(**PEP 453** で定義されています)は標準の
クロスプラットフォームのメカニズムで、Python インストールと仮想環境に
pip インストーラをブートストラップします。Python 3.4.0 に含まれる
"pip" のバージョンは "pip" 1.5.4 で、将来の 3.4.x メンテナンスリリース
では Python のリリース候補の作成時点で入手出来る最新バージョンの "pip"
がバンドルされる予定です。

デフォルトでは "pipX" , "pipX.Y" コマンドが全てのプラットフォームに、
Python パッケージ "pip" とその依存物とともにインストールされます(X. Y
はインストールされる Python のバージョン)。Windows 実環境と全てのプラ
ットフォームの仮想環境には、バージョンが名前に付与されない "pip" コマ
ンドもインストールされます。ほかのプラットフォームでは、システムワイド
でバージョンが名前に付与されない "pip" コマンドは、典型的には Python 2
を別途インストールした際のものを指しています。

"pyvenv" コマンドラインユーティリティと "venv" モジュールは、仮想環境
で "pip" が使えるようにするために "ensurepip" モジュールを使います。
コマンドラインユーティリティを使う際は "pip" はデフォルトでインストー
ルされます。 "venv" モジュールの API を使う際は、 "pip" のインストール
は明示的に要求しなければなりません。

CPython の source builds on POSIX systems では "make install", "make
altinstall" コマンドはデフォルトで "pip" ブートストラップを行います。
この振る舞いは configure のオプションを変更して Makefile を作ることで
変更できます。

Windows と Mac OS X では CPython インストーラはそれ自身と一緒に "pip"
をデフォルトでインストールするようになっています(ユーザはインストール
プロセスで除外するかもしれませんが)。Windows ユーザは "pip" がコマンド
ラインからデフォルトで利用可能なように "PATH" の自動修正するかの選択を
求められます。そうしない場合でも Windows のための Python ランチャで
"py -m pip" のようにすれば良いです。

As **discussed in the PEP** platform packagers may choose not to
install these commands by default, as long as, when invoked, they
provide clear and simple directions on how to install them on that
platform (usually using the system package manager).

注釈:

  Python 2 と Python 3 の共存インストールでの衝突を避けるために、
  "ensurepip" を直接呼び出した場合のデフォルトでは、バージョン付けされ
  た "pip3", "pip3.4" コマンドだけがインストールされます。バージョン付
  けのない "pip" コマンドもインストールしたければ、 "--default-pip" オ
  プションが必要です。 "pyvenv" と Windows インストーラは修飾のない
  "pip" コマンドがそれら環境で利用可能となるように保障しますし、また、
  複数の Python がインストールされたシステムで曖昧さを避けようと直接コ
  マンドを呼び出す代わりに、 "pip" は "-m" スイッチ経由でいつでも呼び
  出せます。


ドキュメントの変更
~~~~~~~~~~~~~~~~~~

この変更の一部は、 Python モジュールのインストール と Python モジュー
ルの配布 セクションがより手短な始め方として完全にデザインし直されたこ
とと、FAQ ドキュメントです。ほとんどのパッケージングについてのドキュメ
ンテーションは Python Packaging User Guide  が保守している Python
Packaging Authority に移動されて、独立したプロジェクトのドキュメンテー
ションになっています。

However, as this migration is currently still incomplete, the legacy
versions of those guides remaining available as setuptools による C お
よび C++ 拡張のビルド and setuptools による C および C++ 拡張のビルド.

参考:

  **PEP 453** -- Python インストールの際の明示的なpipのブートストラッ
  ピング
     PEP は Donald Stufft と Nick Coghlan によって書かれ、Donald
     Stufft, Nick Coghlan, Martin von Löwis, Ned Deily により実装され
     ました。


PEP 446: 新規作成されたファイル記述子は継承不可
-----------------------------------------------

**PEP 446** により、新規作成するファイル記述子は 継承不可 (non-
inheritable) となります。一般的にはこれこそがアプリケーションが望む振
る舞いです。新たにプロセスを生成する際に、現在開いているファイルを起こ
した子プロセスでも開くことは、検出が困難なあらゆるバグや潜在的なセキュ
リティ問題を引き起こしかねません。

そうはいっても継承することが望ましい場合もあります。それらのケースをサ
ポートするために、以下の新規関数とメソッドが利用出来ます:

* "os.get_inheritable()", "os.set_inheritable()"

* "os.get_handle_inheritable()", "os.set_handle_inheritable()"

* "socket.socket.get_inheritable()", "socket.socket.set_inheritable()"

参考:

  **PEP 446** -- 新規作成されたファイル記述子を継承不可にする
     PEP written and implemented by Victor Stinner.


Codec 処理の改良
----------------

その最初の導入からずっと、 "codecs" モジュールとはいつなんどきも、型に
中立で動的なエンコーディング・デコーディングシステムとして働くものであ
ったのです。そうなのですがその Python テキストモデルとの密接な結合、特
に組み込み型 "str", "bytes", "bytearray" にある型に制限があるコンビニ
エンスメソッドのおかげで、歴史的にその本来の意図を曖昧にしてきたのでし
た。

そんな状況を清く正しくするための重要な一歩として、今ではコンビニエンス
関数 "codecs.encode()", "codecs.decode()" が Python 2.7、3.3、3.4 で適
切にドキュメントされました。これら関数は "codecs" モジュールに Python
2.4 からずっと存在している (うえに回帰テストスイートでもずっと網羅して
きた) のですが、以前はドキュメントされていなかったわけなので、実行時イ
ントロスペクションでようやく見つけられるというものだったわけです。

"str", "bytes", "bytearray" でのコンビニエンスメソッドが Python 3 では
Unicode テキストエンコーディングに制限され、Python 2 では "basestring"
<-> "basestring" 変換に制限されるのとは違うのです。 "codecs" のコンビ
ニエンス関数は Python 2 と Python 3 の両方で任意のコーデックをサポート
するのです。

Python 3.4 では、インタプリタは標準ライブラリで提供している非テキスト
エンコーディングについて知っています。そして以下のように適宜、それら汎
用目的のコンビニエンス関数へユーザを誘導します:

   >>> b"abcdef".decode("hex")
   Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
   LookupError: 'hex' is not a text encoding; use codecs.decode() to handle arbitrary codecs

   >>> "hello".encode("rot13")
   Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
   LookupError: 'rot13' is not a text encoding; use codecs.encode() to handle arbitrary codecs

   >>> open("foo.txt", encoding="hex")
   Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
   LookupError: 'hex' is not a text encoding; use codecs.open() to handle arbitrary codecs

関連する変更で、後方互換性を壊すことなくそれが相応しい場合にはいつでも
、エンコーディング・デコーディング操作中に起こる例外は、同じ例外型であ
りエラーを発生させることになった原因コーデックの名前に言及する連鎖例外
内に包まれます:

   >>> import codecs

   >>> codecs.decode(b"abcdefgh", "hex")
   Traceback (most recent call last):
     File "/usr/lib/python3.4/encodings/hex_codec.py", line 20, in hex_decode
       return (binascii.a2b_hex(input), len(input))
   binascii.Error: Non-hexadecimal digit found

   The above exception was the direct cause of the following exception:

   Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
   binascii.Error: decoding with 'hex' codec failed (Error: Non-hexadecimal digit found)

   >>> codecs.encode("hello", "bz2")
   Traceback (most recent call last):
     File "/usr/lib/python3.4/encodings/bz2_codec.py", line 17, in bz2_encode
       return (bz2.compress(input), len(input))
     File "/usr/lib/python3.4/bz2.py", line 498, in compress
       return comp.compress(data) + comp.flush()
   TypeError: 'str' does not support the buffer interface

   The above exception was the direct cause of the following exception:

   Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
   TypeError: encoding with 'bz2' codec failed (TypeError: 'str' does not support the buffer interface)

そしてついに、ここまで実例で見てきたような的確な誘導による改善が、それ
自体は Python 3.2 で復活していた非 Unicode コーデックへのコンビニエン
スのエイリアスの復活を可能にしました。(---訳注: Python 3.0 で一度非
Unicode エンコーディングは消滅し、3.2 でそれらコーデックそのものは復活
したものの、 Lib/encodings/aliases.py のマッピングからは除外されたまま
だった。---) つまり、バイナリデータの 16 進表現エンコードとそのデコー
ド (たとえば、です) は、今ではこう書けるということです:

   >>> from codecs import encode, decode
   >>> encode(b"hello", "hex")
   b'68656c6c6f'
   >>> decode(b"68656c6c6f", "hex")
   b'hello'

標準ライブラリで提供されるバイナリ変換とテキスト変換は、 バイナリ変換
(Binary Transforms) と テキスト変換 (Text Transforms) に詳細記述されま
した。

(Contributed by Nick Coghlan in bpo-7475, bpo-17827, bpo-17828 and
bpo-19619.)


PEP 451: インポートシステムのための ModuleSpec 型
-------------------------------------------------

**PEP 451** は、インポート機構がロードに使うモジュールに関する情報 (つ
まりモジュールの仕様) のカプセル化を提供します。これはインポートの実装
とインポート関連 API の両方を単純化するのに役立ちます。この変更は、 い
くつかの将来のインポート関連の改善 の足掛かりでもあります。

この PEP による公な側面での変化は完全に後方互換です。さらにそれらは、
インポーターの作者以外にとっては透過的であるはずです。鍵となるファイン
ダとローダのメソッドはまだ動作し続けますが非推奨となりました。新しいイ
ンポータは PEP に記述された新メソッドを使うべきです。既存のインポータ
は新メソッドを実装するように更新すべきです。置き換えられるべきメソッド
とその代わりとなるメソッドのリストについては 非推奨 を参照してください
。


その他の言語変更
----------------

Python 言語コアに小さな変更がいくつか行われました:

* Unicode データベースを UCD バージョン 6.3 にアップグレードしました。

* "min()" と "max()" にキーワード専用引数 *default* が追加されました。
  これにはイテラブルが要素なしであると評価される場合に返す値を指定出来
  ます。 (Contributed by Julian Berman in bpo-18111.)

* Module objects are now weakly referenceable.

* モジュールの "__file__" 属性 (と関連する値) にはデフォルトでは常に絶
  対パスを含むようになりました。ただし、スクリプトがコマンドラインから
  相対パスを使って直接実行された際の "__main__.__file__" は唯一の例外
  です。 (Contributed by Brett Cannon in bpo-18416.)

* UTF-16 デコーダ (妥当なサロゲートペアを受け付ける) と UTF-16 エンコ
  ーダ (非 BMP 文字のエンコードでサロゲートペアを生成) 以外の、(UTF-7
  を除く) 全ての UTF-* コーデックが、エラーハンドラ "surrogatepass" を
  使わない限りはエンコーディングとデコーディングの両方でサロゲートペア
  を拒絶するようになりました。(Contributed by Victor Stinner, Kang-Hao
  (Kenny) Lu and Serhiy Storchaka in bpo-12892.)

* 新規ドイツ語 EBCDIC codec "cp273".  (Contributed by Michael
  Bierenfeld and Andrew Kuchling in bpo-1097797.)

* 新規ウクライナ語 codec "cp1125".  (Contributed by Serhiy Storchaka
  in bpo-19668.)

* "bytes".join() と "bytearray".join() が引数として任意のバッファオブ
  ジェクトを受け取れるようになりました。 (Contributed by Antoine
  Pitrou in bpo-15958.)

* "int" コンストラクタの *base* 引数に、 "__index__" メソッドを持つ任
  意のオブジェクトを渡せるようになりました。(Contributed by Mark
  Dickinson in bpo-16772.) (---訳注: Python API の変更 に同じ
  bpo-16772 を発端とする変更が書かれているのでそちらも参照して下さい。
  ---)

* フレームオブジェクトに、ローカル変数への全ての参照をフレームからクリ
  アするメソッド "clear()" が追加されました。(Contributed by Antoine
  Pitrou in bpo-17934.)

* "memoryview" が "Sequence" として登録され、また、組み込み関数
  "reversed()" をサポートするようになりました。 (Contributed by Nick
  Coghlan and Claudiu Popa in bpo-18690 and bpo-19078.)

* Argument Clinic の導入、 "inspect" と "pydoc" になされた他の変更の結
  果、多くの場合で "help()" が報告するシグニチャが修正・改善されました
  。

* "__length_hint__()" が、公式な言語仕様の一部になりました (see **PEP
  424**)。 (Contributed by Armin Ronacher in bpo-16148.)


新たなモジュール
================


asyncio
-------

"asyncio" モジュールが追加されました (**PEP 3156** で定義されています)
。これは Python のための標準的で抜き挿し可能なイベントループモデルを、
標準ライブラリに信頼出来る非同期 I/O サポートを追加することで提供し、
また、ほかのイベントループ実装を標準ライブラリと相互運用することを容易
にします。

Python 3.4 では、このモジュールは *暫定 API* であるとみなされています
。

参考:

  **PEP 3156** -- 非同期 IO サポートの再起動: "asyncio" モジュール
     PEP written and implementation led by Guido van Rossum. (訳注:
     PEP タイトルの「Asynchronous IO Support Rebooted: the "asyncio"
     Module」は **PEP 3153** の焼き直しのため。)


ensurepip
---------

新規の "ensurepip" モジュールは **PEP 453** 実装のための本質的な基盤で
す。通常はエンドユーザはこのモジュールを弄ぶ必要はありません。ですが、
"pip" のインストレーションや仮想環境に対する自動ブートストラップを拒否
していた場合には、手動でそれをブートストラップするのに使えます。

"ensurepip" は "pip" のバンドルされたコピーを含んでいて、これは
CPython リリースの最初のリリース候補時点での最新です (このことはメンテ
ナンスリリース、feature リリースの両方に適用されます)。 "ensurepip" 自
身はインターネットアクセスしません。依存パッケージ解決のためのインター
ネットアクセスを要するならばそれは "ensurepip" 実行の後の "pip" で行い
ますし、 "pip" そのもののアップグレードも "pip" 自身で行います。(その
ようなアップグレード版 "pip" は個別のインストールパッケージとみなされ
て、Python がアンインストールされても削除されないことを付記しておきま
す。)

このモジュールが「 *ensure (保障する)* 」を名前に冠するのは、 "pip" が
インストール済みならば何もしないからです。このモジュールは "--upgrade"
オプションを持ちますが、これは既存のインストール版 "pip" がこのモジュ
ールにバンドルされたコピーよりも古い場合に、バンドルされたコピー版
"pip" をインストールします。


enum
----

"enum" モジュール (**PEP 435** にて定義) は標準の列挙型実装を提供しま
す。これにより ("socket" のような) ほかのモジュールが、不透明な整数定
数を後方互換を保ったまま列挙値に置き換えることによって、より情報に富む
エラーメッセージを提供したり、より良いデバッグサポートを行えるようにな
ります。

参考:

  **PEP 435** -- Python 標準ライブラリに enum 型を追加
     PEP written by Barry Warsaw, Eli Bendersky and Ethan Furman,
     implemented by Ethan Furman.


pathlib
-------

新規モジュール "pathlib" は、異なるオペレーティングシステムごとに適切
な意味付けでファイルシステムパスを表現するクラス群を提供しています。パ
スのクラス群は *純粋パス* と *具象パス* に分離されています。前者は I/O
を伴わない純粋なパス計算操作を提供するもので、後者は純粋パスを派生しま
すが I/O 操作も提供します。

Python 3.4 では、このモジュールは *暫定 API* であるとみなされています
。

参考:

  **PEP 428** -- pathlib モジュール -- オブジェクト指向のファイルシス
  テムパス
     PEP written and implemented by Antoine Pitrou.


selectors
---------

新規モジュール "selectors" (**PEP 3156** の一部として作成されました)
は、高水準で効率的な I/O の多重化を行います。これは "select" モジュー
ルプリミティブに基いています。


statistics
----------

新規モジュール "statistics" (**PEP 450** で定義) は統計を扱う中核機能
のいくつかを標準ライブラリで直接提供します。このモジュールはデータ系列
の平均、中央値、最頻値、分散、標準偏差の計算をサポートします。

参考:

  **PEP 450** -- 標準ライブラリに統計モジュールを追加
     PEP written and implemented by Steven D'Aprano


tracemalloc
-----------

新たな "tracemalloc" モジュール (**PEP 454** で定義) は Python が割り
当てたメモリブロックをトレースするためのデバッグツールです。 以下の情
報を提供します:

* オブジェクトが割り当てられた場所をトレースする

* ファイル名ごと、及び行ごとに割り当てられたメモリブロックの以下の統計
  を取ります：総サイズ、ブロック数、割り当てられたブロックの平均サイズ

* メモリリークを検出するために2つのスナップショットの差を計算します。

参考:

  **PEP 454** -- Python メモリ割り当てをトレースするための tracemalloc
  モジュールの追加
     PEP written and implemented by Victor Stinner


改良されたモジュール
====================


abc
---

新規関数 "abc.get_cache_token()" は、オブジェクトグラフ内での変化の影
響を受けるキャッシュをいつ無効化すれば良いかを知るために使えます。
(Contributed by Łukasz Langa in bpo-16832.)

新規クラス "ABC" はそのメタクラスとして "ABCMeta" を持ちます。この
"ABC" を基底クラスとして使うことは "metaclass=abc.ABCMeta" を指定する
のと本質的に同じ効果を持ちますが、少ないタイプ数で単純に書ける上に読み
やすいものになります。(Contributed by Bruno Dupuis in bpo-16049.)


aifc
----

The "getparams()" method now returns a namedtuple rather than a plain
tuple.  (Contributed by Claudiu Popa in bpo-17818.)

"aifc.open()" now supports the context management protocol: when used
in a "with" block, the "close()" method of the returned object will be
called automatically at the end of the block.  (Contributed by Serhiy
Storchacha in bpo-16486.)

The "writeframesraw()" and "writeframes()" methods now accept any
*bytes-like object*.  (Contributed by Serhiy Storchaka in bpo-8311.)


argparse
--------

"FileType" クラスが *encoding* 引数、 *errors* 引数を受け付けるように
なりました。これは "open()" にそのまま渡されます。 (Contributed by
Lucas Maystre in bpo-11175.)


audioop
-------

"audioop" now supports 24-bit samples.  (Contributed by Serhiy
Storchaka in bpo-12866.)

New "byteswap()" function converts big-endian samples to little-endian
and vice versa.  (Contributed by Serhiy Storchaka in bpo-19641.)

All "audioop" functions now accept any *bytes-like object*.  Strings
are not accepted: they didn't work before, now they raise an error
right away. (Contributed by Serhiy Storchaka in bpo-16685.)


base64
------

"base64" のエンコード・デコード関数が任意の *bytes-like object* オブジ
ェクトを受け取れるようになりました。以前は "bytes" または "bytearray"
インスタンスである必要がありました。 (Contributed by Nick Coghlan in
bpo-17839.)

新規関数 "a85encode()", "a85decode()" は "Ascii85" フォーマットの、
"b85encode()", "b85decode()" は git/mercurial の "Base85" フォーマット
の、バイナリデータのエンコード・バイナリデータへのデコードを提供します
。 "a85" 関数は、Abobe 方言を含む "Ascii85" エンコーディングの変種と互
換性を持たせるためのオプションを持っています。(Contributed by Martin
Morrison, the Mercurial project, Serhiy Storchaka, and Antoine Pitrou
in bpo-17618.)


collections
-----------

"ChainMap.new_child()" メソッドが、チェーンに追加する子マップを指定す
る *m* 引数を取るようになりました。これにより、以前は組み込み辞書が必
ず maps の先頭になっていましたが、カスタムマッピング型も使えるようにな
ります。(Contributed by Vinay Sajip in bpo-16613.)


colorsys
--------

RGB --- YIQ 変換の係数の桁数が FCC NTSC version に合うように広げられま
した。結果としての変化は 1% 未満のはずで、また、ほかの処理系での結果と
より合致するでしょう。 (Contributed by Brian Landers and Serhiy
Storchaka in bpo-14323.)


contextlib
----------

新規コンテキストマネージャ "contextlib.suppress" によって、意図して単
独ステートメントからの例外を抑制しているというコードの意図をはっきりと
読み手に伝えることが出来ます。 (Contributed by Raymond Hettinger in
bpo-15806 and Zero Piraeus in bpo-19266.)

新規コンテキストマネージャ "contextlib.redirect_stdout()" は、ユーティ
リティスクリプトにて、その出力を "sys.stdout" に書き出す一方でその向き
先を変えれない頑固な API の扱いを簡単にしてくれます。これを使うと、
"sys.stdout" 出力をなにかほかのストリームに振り替えたり、あるいは
"io.StringIO" と組み合わせて文字列化したり出来ます。後者などは特に便利
で、たとえば元々はコマンドラインインターフェイスとして実装された関数か
らの出力を取り込む、などということが出来ます。このコンテキストマネージ
ャはユーティリティスクリプト以外では使わない方が肝要です。というのもこ
れは "sys.stdout" の大域的な状態に影響を与えてしまうからです。
(Contributed by Raymond Hettinger in bpo-15805.)

"contextlib" ドキュメントにも改善が行われ、コンテキストマネージャを単
独で使うのと再利用したり再入可能(リエントラント)するのとの違いについて
の 議論 が追加されました。


dbm
---

"dbm.open()" がコンテキスト管理プロトコルをサポートするようになりまし
た: "with" ブロックで使うとデータベースオブジェクトの "close" メソッド
がブロックの終了時に自動的に呼び出されます。 (Contributed by Claudiu
Popa and Nick Coghlan in bpo-19282.)


dis
---

関数 "show_code()", "dis()", "distb()", "disassemble()" が新たにキーワ
ード専用引数 *file* を受け取ります。これは出力先を制御します。

"dis" モジュールはいまでは "Instruction" クラスを中心に据えて構築され
ています。これは個々のバイトコード操作の詳細に対し、オブジェクト指向的
なアクセスを提供するクラスです。

新規メソッド "get_instructions()" が、与えた Python コード片についての
命令 (インストラクション) ストリームを発行するイテレータを提供します。
これを使えば、"dis" モジュール自身が提供しているのとは違った方法で、バ
イトコードオブジェクトを調べたり加工するようなプログラムを書くことが出
来ます。例えばこのように書けます:

   >>> import dis
   >>> for instr in dis.get_instructions(lambda x: x + 1):
   ...     print(instr.opname)
   LOAD_FAST
   LOAD_CONST
   BINARY_ADD
   RETURN_VALUE

"dis" モジュールにある色々な表示ツールが、これらの新しい構成要素でもっ
て書き直されました。

アプリケーションフレンドリな "Bytecode" クラスも追加されています。これ
はバイトコードを調べるのに、人が読める形式としてもインストラクション列
をイテレートするのにも優しい、オブジェクト指向的な API になっています
。 "Bytecode" コンストラクタは "get_instruction()" と同じ引数 (と、追
加でオプショナルな *current_offset*) を受け取って、結果のオブジェクト
は "Instruction" オブジェクトを生成するイテレータとして振舞うことが出
来ます。このオブジェクトは、 "dis" にコンストラクタ引数を渡して呼び出
すのと等価な "dis" メソッドも持っていますが、マルチライン文字列で返し
ます:

   >>> bytecode = dis.Bytecode(lambda x: x + 1, current_offset=3)
   >>> for instr in bytecode:
   ...     print('{} ({})'.format(instr.opname, instr.opcode))
   LOAD_FAST (124)
   LOAD_CONST (100)
   BINARY_ADD (23)
   RETURN_VALUE (83)
   >>> bytecode.dis().splitlines()
   ['  1           0 LOAD_FAST                0 (x)',
    '      -->     3 LOAD_CONST               1 (1)',
    '              6 BINARY_ADD',
    '              7 RETURN_VALUE']

"Bytecode" にはクラスメソッド "from_traceback()" もあります。トレース
バックから "Bytecode" を構築します。
("print(Bytecode.from_traceback(tb).dis())" は "distb()" を使って
"distb(tb)" とするのと同じです。)

(Contributed by Nick Coghlan, Ryan Kelly and Thomas Kluyver in
bpo-11816 and Claudiu Popa in bpo-17916.)

新規関数 "stack_effect()" は与えられた opcode (命令コード) と引数の
Python スタックへの effect を計算します。この情報は他からは得られませ
ん。 (Contributed by Larry Hastings in bpo-19722.) (---訳注:
"PyCompile_OpcodeStackEffect" として C API として曝した上で Python か
らアクセス出来るようにしたものらしいです。 stackdepth_walk での使用箇
所 参照。---)


doctest
-------

A new option flag, "FAIL_FAST", halts test running as soon as the
first failure is detected.  (Contributed by R. David Murray and Daniel
Urban in bpo-16522.)

"doctest" コマンドラインインターフェイスは "argparse" を使うようになり
ました。2 つの新オプション "-o" と "-f" が追加されています。 "-o" によ
りコマンドラインから doctest オプション を指定することが出来ます。
"-f" は "-o FAIL_FAST" の速記法です ("unittest" CLI でサポートされる似
たオプション サポートされる同じオプション に似せるためです)。
(Contributed by R. David Murray in bpo-11390.)

"doctest" はいまや、拡張モジュールの "__doc__" 文字列から doctest を見
つけることが出来ます。 (Contributed by Zachary Ware in bpo-3158.)


email
-----

"as_string()" メソッドが、その文字列表現を生成するのに使うデフォルトポ
リシーを上書き出来る *policy* 引数を取るようになりました。つまり
"Message" を作り直したり "flattern" メソッドの書式化パラメータのためだ
けに "generator" を使うことなしに、 "as_string" をより多くの状況で使え
るということになります。(Contributed by R. David Murray in bpo-18600.)

"as_bytes()" メソッドが追加されました。これは "as_string" が文字列表現
を生成するのと似たやり方で、メッセージの bytes 表現を生成します。これ
は *maxheaderlen* 引数を取りませんが、 *unixfrom* 引数と *policy* 引数
を取ります。 "Message" の "__bytes__()" がこれを呼び出すようにしたので
、 "bytes(mymsg)" は今や直感に反しない結果、つまり完全にフォーマットさ
れたメッセージを生成します。(Contributed by R. David Murray in
bpo-18600.)

"Message.set_param()" メソッドにキーワード引数 *replace* が追加されま
した。真を渡すとヘッダリスト内のその位置を変更せずに関連ヘッダを更新し
ます。後方互換のためにデフォルトは "False" です。 (Contributed by R.
David Murray in bpo-18891.)

サブモジュール "contentmanager" と "policy" 属性の "content_manager"
の追加と併せて、 "Message" の対となる二つのサブクラス ("EmailMessage"
と "MIMEPart") が追加されました。 全てのドキュメントは、 email の新規
*暫定 API* の構成要素として追加されたこの新しいモジュールにあります。
これらのクラスは、 email メッセージからの内容抽出や挿入を遥かに簡単に
行える、数多くの新規メソッドを提供しています。 詳細は "contentmanager"
のドキュメントと email: 使用例 を参照してください。 これらの API の追
加作業により email6 プロジェクトの一部として計画されていた作業は、その
大部分が完了しました。 現在のところ、暫定 API 状態は Python 3.5 で最後
となる予定です (可能性としてはエラー処理あたりのゾーンでは少々の些細な
追加は残るかもしれません)。 (Contributed by R. David Murray in
bpo-18891.)


filecmp
-------

"clear_cache()" 関数が追加されました。 "filecmp" は "os.stat()" 情報を
キャッシュして最後の比較時点からのファイルの変化をみていますが、このキ
ャッシュをクリアします。これはたとえば、ファイルシステムのタイムスタン
プフィールドの解像度未満の時間差で再比較したい場合に使えるでしょう。
(Contributed by Mark Levitt in bpo-18149.)

New module attribute "DEFAULT_IGNORES" provides the list of
directories that are used as the default value for the *ignore*
parameter of the "dircmp()" function.  (Contributed by Eli Bendersky
in bpo-15442.)


functools
---------

新たな "partialmethod()" デスクリプタは、ちょうど普通の callable に対
して "partial()" がするように、デスクリプタへの引数部分適用を可能にし
ます。この新しいデスクリプタをクラス定義内で使うと、簡単に
("partial()" インスタンスを含む) 任意の callable を普通のインスタンス
メソッドのように振舞わせることも出来ます。(Contributed by Alon Horev
and Nick Coghlan in bpo-4331.)

新たな "singledispatch()" デコレータは、Python 標準ライブラリにシング
ルディスパッチのジェネリック関数のサポートを追加します。オブジェクト指
向プログラミングは共通データ集合についての複数操作をまとめあげてクラス
に押し込めようとしますが、ジェネリック関数は *異なった* 種類のデータに
対して動作させたい操作の複数実装をひとつにまとめあげる考え方です。(---
訳注: ここで「ジェネリック関数」と呼んでいるものを他の言語との類推で理
解しようとすると、「呼び出す側目線」では同じで、「呼び出される側」目線
では違うかもしれません。例えば C++ ユーザは「template の特殊化」もしく
は「型ごとのオーバロード」との類推で理解してください。---)

参考:

  **PEP 443** -- シングルディスパッチのジェネリック関数
     PEP written and implemented by Łukasz Langa.

"total_ordering()" now supports a return value of "NotImplemented"
from the underlying comparison function.  (Contributed by Katie Miller
in bpo-10042.)

"partial()" 関数のピュア Python 版が標準ライブラリに追加されました。
CPython の場合は C による高速版で置き換えられますが、ほかの Python 実
装で利用出来ます。 (Contributed by Brian Thorne in bpo-12428.)


gc
--

新規関数 "get_stats()" は、インタプリタが開始してからの、世代ごと回収
統計を持つ辞書の、3 世代ぶんのリストを返します。(Contributed by
Antoine Pitrou in bpo-16351.)


glob
----

新規関数 "escape()" は、glob 的な展開がなされないようにして字句通りの
合致をするように、ファイル名に含まれる特殊文字をエスケープする手段とな
ります。(Contributed by Serhiy Storchaka in bpo-8402.)


hashlib
-------

新たな関数 "hashlib.pbkdf2_hmac()" は PKCS#5 パスワードベースの鍵導出
関数２ を提供します。 (Contributed by Christian Heimes in bpo-18582.)

"hashlib" のハッシュオブジェクトの "name" 属性が、公式にサポートされる
インターフェイスになりました。これは CPython の "hashlib" には以前から
存在していました (ただしサポートされるハッシュの名前を必ずしも小文字で
返してはいませんでした) が、公開インターフェイスとしていなかったために
、ほかのいくつかの Python 実装では以前はサポートされていませんでした。
(Contributed by Jason R. Coombs in bpo-18532.)


hmac
----

"hmac" は、 "new()" の *key* 引数として "bytearray" と "bytes" を許容
するようになり、また、 "new()" 関数と "update()" メソッドの両方への
*msg* パラメータとして、 "hashlib" モジュールがサポートする任意の型を
許容するようになりました。(Contributed by Jonas Borgström in
bpo-18240.)

"hmac.new()" 関数への *digestmod* 引数には、"hashlib" が認識する任意の
ハッシュダイジェスト名を渡せるようになりました。これとともに、
*digestmod* のデフォルトとして "MD5" を使う現在の振る舞いは非推奨です
。将来のバージョンの Python ではこれのデフォルト値はなくなり、指定が必
須になります。 (Contributed by Christian Heimes in bpo-17276.)

"block_size" 属性と "name" 属性 (と "digest_size" 属性の公式ドキュメン
ト) の追加をもって、 "hmac" モジュールは完全に **PEP 247** API を遵守
するものとなりました。 (Contributed by Christian Heimes in bpo-18775.)


html
----

新規関数 "unescape()" は HTML5 文字参照を対応する Unicode 文字に変換し
ます。 (Contributed by Ezio Melotti in bpo-2927.)

"HTMLParser" が新規キーワード引数 *convert_charrefs* を受け取ります。
これが "True" の場合に、全ての文字参照が自動的に変換されます。後方互換
性の問題から今はこのデフォルトを "False" にしてありますが、将来バージ
ョンの Python でこれを "True" に変えます。ですから値は明示的にセットし
てこの新しい機能を使うように更新しておくと良いです。(Contributed by
Ezio Melotti in bpo-13633.)

"HTMLParser" の *strict* 引数が非推奨となりました。 (Contributed by
Ezio Melotti in bpo-15114.)


http
----

"send_error()" がオプショナルなパラメータ *explain* を受け付けるように
なりました。指定されると、拡張のエラー説明を提供するにあたって、ハード
コードされたデフォルトの代わりに使われます。この拡張のエラー説明は
"error_message_format" 属性を使ってフォーマットされて、エラーレスポン
スのメッセージボディとして送信されます。(Contributed by Karl Cow in
bpo-12921.)

"http.server" の コマンドラインインターフェイス に "-b/--bind" オプシ
ョンが追加されました。これは特定のアドレスで listen することを指示しま
す。 (Contributed by Malte Swart in bpo-17764.) (---訳注: ネットワーク
プログラミングに詳しい人ほど混乱しそうなので一応。 "--bind" というオプ
ション名が示すとおり、より正確に表現するなら「ユーザ指定のネットワーク
インターフェイスに bind」。コミットログの表現「Expose --bind argument
for http.server, enable http.server to bind to a user specified
network interface.」の方がわかりやすいかと。  ---)


idlelib と IDLE
---------------

idlelib は IDLE シェルとエディタを実装するものであってほかのプログラム
からインポートされることを意図してはいないので、改善は毎度のリリースご
とに行われます。3.3.0 から始まり、また将来の 3.4.x リリースになされる
累積的な変更リストは "Lib/idlelib/NEWS.txt" で読むことが出来ます。この
ファイルは IDLE で Help ‣ About IDLE からも辿り着けます。


importlib
---------

"InspectLoader" ABC に新規メソッド "source_to_code()" が追加されました
。ソースデータとパスを受け取り、コードオブジェクトを返します。これのデ
フォルト実装は "compile(data, path, 'exec', dont_inherit=True)" と同じ
です。 (Contributed by Eric Snow and Brett Cannon in bpo-15627.)

"InspectLoader" では "get_code()" メソッドへのデフォルト実装追加も行わ
れました。とはいえ性能面の理由より、通常はデフォルト実装をオーバライド
することが望ましいです。 (Contributed by Brett Cannon in bpo-18072.)

The "reload()" function has been moved from "imp" to "importlib" as
part of the "imp" module deprecation.  (Contributed by Berker Peksag
in bpo-18193.)

"importlib.util" now has a "MAGIC_NUMBER" attribute providing access
to the bytecode version number.  This replaces the "get_magic()"
function in the deprecated "imp" module. (Contributed by Brett Cannon
in bpo-18192.)

New "importlib.util" functions "cache_from_source()" and
"source_from_cache()" replace the same-named functions in the
deprecated "imp" module.  (Contributed by Brett Cannon in bpo-18194.)

"importlib" ブートストラップ "NamespaceLoader" が "InspectLoader" ABC
に従うようになりました。つまりこれにより "runpy" と "python -m" が名前
空間パッケージに対して使えるようになりました。(Contributed by Brett
Cannon in bpo-18058.)  (訳注: 3.3 以降の名前空間パッケージについては
What's New In Python 3.3 (**PEP 420**) 参照。)

"importlib.util" に "decode_source()" 関数が追加されました。
*universal newlines* 処理を使って bytes からソースをデコードします。
"InspectLoader.get_source()" メソッドを実装するのに便利です。

"importlib.machinery.ExtensionFileLoader" に "get_filename()" メソッド
が追加されました。これは本来実装されるべきものでしたが見落とされていま
した。(Contributed by Eric Snow in bpo-19152.)


inspect
-------

"inspect" モジュールに、ソースコードおよびモジュール・クラス・関数につ
いてのその他情報を手早く表示するための、基礎的な コマンドラインインタ
ーフェイス が追加されました。  (Contributed by Claudiu Popa and Nick
Coghlan in bpo-18626.)

新規の "unwrap()" で、 "functools.wraps()" (やラッパー関数に
"__wrapped__" 属性をセットするその他 API) で作られたラッパー関数のチェ
インを、簡単にほどくことが出来ます。 (Contributed by Daniel Urban,
Aaron Iles and Nick Coghlan in bpo-13266.) (---訳注: 「簡単に」の意味
するところについて、 Python API の変更 に記述されている
"functools.update_wrapper()" と "functools.wraps()" の変更も参照して下
さい。---)

新規 "enum" モジュールが実装されたことを受け "inspect" モジュールは、
カスタム "__dir__" メソッドに対する、またメタクラスを介して提供される
動的クラス属性に対する、ずっと良いサポートを提供出来るようになりました
。 (Contributed by Ethan Furman in bpo-18929 and bpo-19030.)

"getfullargspec()" と "getargspec()" が "signature()" API を使うように
なりました。このことで、以前より遥かに幅広い callable をサポートするよ
うになっています。それには "__signature__" 属性を含むもの、 Argument
Clinic で提供されるメタデータを含むもの、あるいは
"functools.partial()" オブジェクト、なども含まれます。 "signature()"
そのものとは違い、今でも "getfullargspec()", "getargspec()" は
"__wrapped__" 属性を無視し、そして束縛されたメソッドで最初に束縛された
引数を報告するので、それが望みでないならば "signature()" を直接使うよ
うにあなたのコードを更新する必要があります。(Contributed by Yury
Selivanov in bpo-17481.) (---訳注: What's New In Python 3.5 を参照して
ください。 "signature()" により "getfullargspec()" と "getargspec()"
は結果として非推奨となりました。---)

"signature()" が CPython 関数のダックタイプをサポートするようになりま
した。これは Cython でコンパイルされた関数をサポートすることになります
。 (Contributed by Stefan Behnel and Yury Selivanov in bpo-17159.)
(---訳注: duck type はここでは「 "types.FunctionType" であることを要求
しない」の意味。 _signature_is_functionlike 参照。 ---)


ipaddress
---------

"ipaddress" は Python 3.3 で標準ライブラリに *暫定 API* として追加され
ました。Python 3.4 リリースで、この但し書きは削除されました:
"ipaddress" は今や安定 API とみなされ、今後は通常の標準ライブラリの後
方互換性維持要件に従います。

新規のプロパティ "is_global" は、アドレスが routeable である場合に
"True" を返します。 (Contributed by Peter Moody in bpo-17400.) (---訳
注: リファレンスマニュアルでは routeable という表現ではなく「アドレス
がパブリックネットワークに割り当てられている場合」。---)


logging
-------

"TimedRotatingFileHandler" に *atTime* パラメータが追加されました。ロ
ールオーバ対象となる日付での時刻を指定します。 (Contributed by Ronald
Oussoren in bpo-9556.)

"SocketHandler" と "DatagramHandler" が Unix ドメインソケットをサポー
トするようになりました (*port* に "None" をセットすることで)。
(Contributed by Vinay Sajip in commit ce46195b56a9 .)

"fileConfig()" が *fname* パラメータとして
"configparser.RawConfigParser" のサブクラスを許容するようになりました
。これはロギングの設定がアプリケーション全体の設定の一部に過ぎない場合
や、 "fileConfig()" に渡す前にアプリケーションが設定を修正するような場
合でも設定ファイルを使用することを容易にします。(Contributed by Vinay
Sajip in bpo-16110.)

"logging.config.listen()" 関数経由でソケットから受信したロギング設定デ
ータを、処理前に検証出来るようになりました。新規のキーワード引数
*verify* に検証関数を渡すことで可能です。(Contributed by Vinay Sajip
in bpo-15452.)


marshal
-------

"marshal" のバージョンが 3 に上げられました。新バージョンを実装してい
るコードは、intern された文字列をただ一つのコピーだけ記録しておきデシ
リアライズでその intern を維持するという Python 2 での振舞いを復活させ
つつ、「ただ一つのコピー」を文字列型のみならず任意のオブジェクト型に (
再帰参照の処理も含め) 拡張しています。これは ".pyc" ファイルのサイズを
削減し、また、 ".pyc" (または ".pyo") ファイルからロードされる際にモジ
ュールが占めるメモリ量を削減します。(Contributed by Kristján Valur
Jónsson in bpo-16475, with additional speedups by Antoine Pitrou in
bpo-19219.)


mmap
----

mmap objects are now weakly referenceable. (Contributed by Valerie
Lambert in bpo-4885.)


multiprocessing
---------------

"multiprocessing" を使ってプロセスを開始する 開始方式 として、Unix に
おいて 2 つ、 "spawn" と "forkserver" が追加されました。これらはスレッ
ドとプロセスのミックスをより堅牢にし、また、 "spawn" は
multiprocessing が以前から常に Windows で使ってきたセマンティクスと一
致します。新規関数の、 "get_all_start_methods()" はプラットフォームで
利用出来るすべての開始方式を報告し、 "get_start_method()" は現在設定さ
れている開始方式を報告し、 "set_start_method()" は開始方式を設定します
。(Contributed by Richard Oudkerk in bpo-8713.)

"multiprocessing" には、子プロセスがどのように作られるかを決定する
"context" のコンセプトが追加されています。新規関数 "get_context()" は
指定した開始方式を使うコンテキストを返します。コンテキストは
"multiprocessing" モジュール自身と同じ API を持っているので、コンテキ
スト内で操作する "Pool" や他のオブジェクトを、それを使って作成すること
が出来ます。コンテキストによって、フレームワークとアプリケーションある
いは同じアプリケーションの別の部分が相互に干渉しあわないようにして
multiprocessing を使うことが出来ます。(Contributed by Richard Oudkerk
in bpo-18999.)

昔からの *fork* 開始方式を除き、子プロセスはもはや必要のないハンドル・
ファイル記述子をその親から継承しません。 (part of bpo-8713).

"multiprocessing" が開始方式に "spawn" または "forkserver" を使う場合
に、子プロセスで適切に "__main__" を初期化するために "runpy" (これが
"-m" スイッチを実装しています) に頼るようになりました。これは、
multiprocessing と "-m" コマンドラインスイッチ・明示的な相対インポート
を組み合わせると子プロセスが不可解に失敗していたような、いくつかの際ど
い問題を解決します。 (Contributed by Nick Coghlan in bpo-19946.)


operator
--------

新規関数 "length_hint()" は、言語仕様となった特殊メソッド
"__length_hint__()" の **PEP 424** 公式仕様の一環として、それがどのよ
うに使われるのかについて詳述する実装を提供します。(Contributed by
Armin Ronacher in bpo-16148.)

参照実装として、また Python 実装の代替として用いることが出来る、
"operator" モジュールのピュア Python 版が書かれました。 (Contributed
by Zachary Ware in bpo-16694.)


os
--

新規関数により 継承可能フラグ を制御出来るようになりました。ファイル記
述子には "os.get_inheritable()", "os.set_inheritable()" を、Windows の
ハンドルには "os.get_handle_inheritable()",
"os.set_handle_inheritable()" を使います。

関数 "cpu_count()" が追加されました。これは Python を実行しているプラ
ットフォームで利用可能な CPU 数を返します (決定できない場合は "None"
を返します)。既存の "multiprocessing.cpu_count()" はこの関数の値を返す
ようになりました。(Contributed by Trent Nelson, Yogesh Chaudhari,
Victor Stinner, and Charles-François Natali in bpo-17914.)

"os.path.samestat()" が Windows プラットフォームでも動作するようになり
ました (また、 "os.path.samefile()" の実装は Unix と Windows で共有さ
れました)。 (Contributed by Brian Curtin in bpo-11939.)

"os.path.ismount()" が Windows において、ドライブルートよりも下にある
マウントポイントを認識するようになりました。  (Contributed by Tim
Golden in bpo-9035.)

"os.open()" supports two new flags on platforms that provide them,
"O_PATH" (un-opened file descriptor), and "O_TMPFILE" (unnamed
temporary file; as of 3.4.0 release available only on Linux systems
with a kernel version of 3.11 or newer that have uapi headers).
(Contributed by Christian Heimes in bpo-18673 and Benjamin Peterson,
respectively.)


pdb
---

"pdb" が、ジェネレータ、 "yield" 、 "yield from" をより価値ある方法で
処理するように強化されました。これは "asyncio" ベースのプログラムをデ
バッグする際にとりわけ助けとなります。 (Contributed by Andrew Svetlov
and Xavier de Gaye in bpo-16596.)

"pdb" から "print" コマンドは削除され、pdb コマンドラインからの Python
"print()" 関数へのアクセスを取り戻しました。 Python 2 の "pdb" には
"print" コマンドはなく "print" の入力は Python 2 の "print" 文を実行し
ていました。 Python 3 で pdb の "p" コマンドへのエイリアスとして
"print" を作ったのが間違いでした。 "p" はその引数の "repr" を表示する
のであって、Python 2 での "print" コマンドがしていた "str" を表示する
のではありません。さらに悪いことに、Python 3 の "pdb print" コマンドは
Python 3 の "print" 関数を隠してしまい、 "pdb" プロンプトからのアクセ
スを出来なくしていたのでした。 (Contributed by Connor Osborn in
bpo-18764.)


pickle
------

"pickle" で新 pickle プロトコル 4 が追加されました (デフォルトにはされ
ていません)。この新プロトコルは、入れ子のクラスや巨大な文字列・コンテ
ナやキーワード専用引数を取る "__new__()" メソッドを持つクラスなどにま
つわるシリアライズの問題など、以前のプロトコルに存在していた数多くの問
題を措置しています。ほかにもいくつか効率面での改善が入っています。

参考:

  **PEP 3154** -- Pickle プロトコル 4
     PEP written by Antoine Pitrou and implemented by Alexandre
     Vassalotti.


plistlib
--------

"plistlib" now has an API that is similar to the standard pattern for
stdlib serialization protocols, with new "load()", "dump()",
"loads()", and "dumps()" functions.  (The older API is now
deprecated.)  In addition to the already supported XML plist format
("FMT_XML"), it also now supports the binary plist format
("FMT_BINARY").  (Contributed by Ronald Oussoren and others in
bpo-14455.)


poplib
------

"poplib" に 2 つの新規メソッドが追加されました。 "capa()" は POP サー
バにより公表された機能リストを返します。 "stls()" は平文 POP3 セッショ
ンを、POP サーバがサポートしていれば暗号化された POP3 セッションに切り
替えます。 (Contributed by Lorenzo Catucci in bpo-4473.)


pprint
------

"pprint" モジュールの、 "PrettyPrinter" クラス、 "pformat()" 関数、
"pprint()" 関数に、新規オプション *compact* が追加されました。これは出
力方法を制御するもので、今のところのこれの "True" での振舞いは、個々の
(インデントされた) 行を *width* 幅で出来るだけ多くのシーケンスの要素が
収まるように出力します。 (Contributed by Serhiy Storchaka in
bpo-19132.)

長い文字列が Python の普通の行継続構文で折り返されるようになりました。
(Contributed by Antoine Pitrou in bpo-17150.)


pty
---

"pty.spawn()" が "None" ではなく "os.waitpid()" からの戻り値から取った
ステータス値を返すようになりました。 (Contributed by Gregory P.
Smith.)


pydoc
-----

"pydoc" モジュールがイントロスペクション API "inspect.signature()" に
直接基くようになりました。これによりより幅広く callable オブジェクトの
シグニチャ情報を提供出来るようになりました。この変更は、ヘルプ情報表示
の際に "__wrapped__" 属性も考慮に入れられることも意味しています。
(Contributed by Larry Hastings in bpo-19674.)

"pydoc" モジュールはもはや既に束縛済みのメソッドでは "self" パラメータ
を表示しません。それよりも、与えられた callable の正確な現在のシグニチ
ャを常に表示しようとします。 (Contributed by Larry Hastings in
bpo-20710.)

"pydoc" に直接なされた変更に加え、背後の "inspect" モジュールの改善が
、カスタム "__dir__" メソッドやさまざまなデスクリプタの扱いについての
振る舞いの大幅な改善に寄与しました。

組み込み "help()" は "pydoc" モジュールに基いているので、上記変更は
"help()" の振る舞いにも影響します。


re
--

"fullmatch()" 関数と "regex.fullmatch()" メソッドが追加されました。こ
れはパターンを合致する文字列の両端に固定します。コード変更や既存の正規
表現になにか代わりとなるものを追加したりする際に、末尾に "$" を入れ忘
れるといった類のバグは気付きにくいものです。これらの関数で、合致すべき
終端をはっきり伝えることが出来ます。 (Contributed by Matthew Barnett
in bpo-16203.)

正規表現オブジェクト の repr にパターンとフラグを含めるようになりまし
た。 match オブジェクト の repr に start、end と合致した部分文字列を含
むようになりました。 (Contributed by Hugo Lopes Tavares and Serhiy
Storchaka in bpo-13592 and bpo-17087.)


resource
--------

新規関数 "prlimit()" は、指定プロセスのリソースリミットの問い合わせと
セットを、一度の呼び出しで行えます。カーネルバージョン 2.6.36 以降で
glibc 2.13 以降の Linux プラットフォームで利用可能です。 (Contributed
by Christian Heimes in bpo-16595.)

On Linux kernel version 2.6.36 or later, there are also some new Linux
specific constants: "RLIMIT_MSGQUEUE", "RLIMIT_NICE", "RLIMIT_RTPRIO",
"RLIMIT_RTTIME", and "RLIMIT_SIGPENDING". (Contributed by Christian
Heimes in bpo-19324.)

On FreeBSD version 9 and later, there some new FreeBSD specific
constants: "RLIMIT_SBSIZE", "RLIMIT_SWAP", and "RLIMIT_NPTS".
(Contributed by Claudiu Popa in bpo-19343.)


select
------

"epoll" がコンテキスト管理プロトコルをサポートするようになりました:
"with" ブロックで使うと  "close()" メソッドがブロックの終了時に自動的
に呼び出されます。 (Contributed by Serhiy Storchaka in bpo-16488.)

"devpoll" オブジェクトに、メソッド "fileno()" とメソッド "close()" 、
それに属性 "closed" が追加されました。 (Contributed by Victor Stinner
in bpo-18794.)


shelve
------

"Shelf" がコンテキスト管理プロトコルをサポートするようになりました:
"with" ブロックで使うとブロックの終了時に自動的にクローズされます。
(Contributed by Filip Gruszczyński in bpo-13896.)


shutil
------

"copyfile()" が、コピー元とコピー先が同じファイルの場合に "Error" の限
定されたサブクラスである "SameFileError" を投げるようになりました。こ
れにより、アプリケーションはこの特定のエラーでそれに相応しいアクション
を取れます。 (Contributed by Atsuo Ishimoto and Hynek Schlawack in
bpo-1492704.)


smtpd
-----

The "SMTPServer" and "SMTPChannel" classes now accept a *map* keyword
argument which, if specified, is passed in to "asynchat.async_chat" as
its *map* argument.  This allows an application to avoid affecting the
global socket map.  (Contributed by Vinay Sajip in bpo-11959.)


smtplib
-------

"SMTPException" が "OSError" のサブクラスになりました。これによって、
とにかくエラーが起こったのだということにしか関心がないコードが、ソケッ
ト階層でのエラーと SMTP プロトコル階層の両エラーを一撃の try/except 文
で捕捉出来るようになりました。 (Contributed by Ned Jackson Lovely in
bpo-2118.)


socket
------

The socket module now supports the "CAN_BCM" protocol on platforms
that support it.  (Contributed by Brian Thorne in bpo-15359.)

ソケットオブジェクトで 継承可能フラグ を制御出来るようになりました。
"get_inheritable()" で取得し、 "set_inheritable()" でセットします。

定数値の "socket.AF_*" と "socket.SOCK_*" が、新規の "enum" モジュール
を使った列挙値になりました。つまりデバッグなどで魑魅魍魎な整数ではなく
徳高い名前で表示されるということです。

The "AF_LINK" constant is now available on BSD and OSX.

"inet_pton()" と "inet_ntop()" が Windows でサポートされるようになりま
した。 (Contributed by Atsuo Ishimoto in bpo-7171.)


sqlite3
-------

"connect()" 関数に新規の真偽値パラメータ *uri* が追加されました。これ
を真にセットすると *database* パラメータを URI として解釈させることが
出来ます。 (SQLite の URI のドキュメント を参照してください)。
(Contributed by poq in bpo-13773.)


ssl
---

"PROTOCOL_TLSv1_1" と "PROTOCOL_TLSv1_2" (TLSv1.1 と TLSv1.2 のサポー
ト) が追加されました。これらプロトコルのサポートは Python が OpenSSL
1.0.1 以降とリンクしている場合にのみ利用可能です。 (Contributed by
Michele Orrù and Antoine Pitrou in bpo-16692.)

新規関数 "create_default_context()" は、互換性とセキュリティの間の程よ
いバランスとなるよう調整された "SSLContext" を得るための標準手段として
追加されました。それらの設定は "SSLContext" コンストラクタが与えるデフ
ォルトよりも厳しく、そして将来的にセキュリティにおけるベストプラクティ
スによる要請が変化すれば、事前予告なしで調整されるかもしれません。SSL
をサポートする標準ライブラリの使用においての新しいベストプラクティスと
して、 "SSLContext" を得るのには "create_default_context()" を使うこと
が推奨です。必要に応じ、対応する標準ライブラリ API の *context* 引数に
渡すためにそれを使うよう修正してください。(Contributed by Christian
Heimes in bpo-19689.)

"SSLContext" のメソッド "load_verify_locations()" にオプショナル引数
*cadata* が追加されました。これには PEM あるいは DER エンコードの証明
書を直接指定できます。前者の場合は文字列で、後者では *bytes-like
object* で指定します。(Contributed by Christian Heimes in bpo-18138.)

関数 "get_default_verify_paths()" が追加されました。これは
"set_default_verify_paths()" メソッドが OpenSSL デフォルトの "cafile"
と "capath" をセットするのに使うパスと環境変数から成る名前付きタプルを
返します。デフォルトの検証にまつわる問題をデバッグするのに使えるでしょ
う。(Contributed by Christian Heimes in bpo-18143.)

"SSLContext" の新規メソッド "cert_store_stats()" はロードされた
"X.509" 証明書、 "X.509 CA" 証明書、証明書失効リスト ("crl") を報告し
、また、新規メソッド "get_ca_certs()" はロードされた "CA" 証明書のリス
トを返します。(Contributed by Christian Heimes in bpo-18147.)

If OpenSSL 0.9.8 or later is available, "SSLContext" has a new
attribute "verify_flags" that can be used to control the certificate
verification process by setting it to some combination of the new
constants "VERIFY_DEFAULT", "VERIFY_CRL_CHECK_LEAF",
"VERIFY_CRL_CHECK_CHAIN", or "VERIFY_X509_STRICT". OpenSSL does not do
any CRL verification by default.  (Contributed by Christien Heimes in
bpo-8813.)

"SSLContext" の新規メソッド "load_default_certs()" は、プラットフォー
ムによって異なるデフォルトの場所から “認証局” (CA=certification
authority) 証明書ファイル一式をロードします。クライアントがサーバを検
証するための TLS web サーバ証明の証明書をロード
("purpose=""SERVER_AUTH") することも、サーバがクライアント証明書を検証
するのに用いる証明書をロード ("purpose=""CLIENT_AUTH") することも出来
ます。(Contributed by Christian Heimes in bpo-19292.)

Windows だけで利用出来る関数が 2 つ追加されました。
"enum_certificates()" と "enum_crls()" で Windows のシステム証明書スト
アから、証明書、証明書の情報、CRLs (certification revocation=証明書失
効リスト) を抽出出来ます。(Contributed by Christian Heimes in
bpo-17134.)

新規メソッド "ssl.SSLContext.set_servername_callback()" によるサーバサ
イド SNI (Server Name Indication) サポートが追加されました。
(Contributed by Daniel Black in bpo-8109.)

"SSLSocket.getpeercert()" が返す辞書に "X509v3" 拡張アイテムを含むよう
になりました: "crlDistributionPoints", "caIssuers", "OCSP" URI。
(Contributed by Christian Heimes in bpo-18379.)


stat
----

The "stat" module is now backed by a C implementation in "_stat". A C
implementation is required as most of the values aren't standardized
and are platform-dependent.  (Contributed by Christian Heimes in
bpo-11016.)

The module supports new "ST_MODE" flags, "S_IFDOOR", "S_IFPORT", and
"S_IFWHT".  (Contributed by Christian Hiemes in bpo-11016.)


struct
------

関数 "iter_unpack" と、コンパイル済フォーマットでのメソッド
"struct.Struct.iter_unpack()" が追加されました。これは、与えられたデー
タフォーマットの繰り返しインスタンスを含むバッファを逐次的にアンパック
します。 (Contributed by Antoine Pitrou in bpo-17804.)


subprocess
----------

"check_output()" が *input* 引数を受け付けるようになりました。これは実
行するコマンドにとっての "stdin" を供給するのに使われます (訳注:
"run()" のドキュメント参照)。 (Contributed by Zack Weinberg in
bpo-16624.)

"getstatus()" と "getstatusoutput()" が Windows でも動作するようになり
ました。ただしこの変更は実際には、不注意で 3.3.4 に対して既に行われま
した。 (Contributed by Tim Golden in bpo-10197.)


sunau
-----

The "getparams()" method now returns a namedtuple rather than a plain
tuple.  (Contributed by Claudiu Popa in bpo-18901.)

"sunau.open()" now supports the context management protocol: when used
in a "with" block, the "close" method of the returned object will be
called automatically at the end of the block.  (Contributed by Serhiy
Storchaka in bpo-18878.)

24 ビットサンプルの出力をサポートしました。つまり
"AU_write.setsampwidth()" に 24 ビットに対応する値をセット出来ます。
(Contributed by Serhiy Storchaka in bpo-19261.)

The "writeframesraw()" and "writeframes()" methods now accept any
*bytes-like object*.  (Contributed by Serhiy Storchaka in bpo-8311.)


sys
---

新規関数 "sys.getallocatedblocks()" は、現在インタプリタによりアロケー
トされているブロック数を返します (デフォルトの "--with-pymalloc" 設定
での CPython では、これは "PyObject_Malloc()" API によるアロケーション
です)。これはメモリリークの追跡に、とりわけテストスイートで自動化され
ている場合はなおさら有用です。 (Contributed by Antoine Pitrou in
bpo-13390.)

Python インタプリタが 対話モード で開始する際に "sys" モジュールの属性
"__interactivehook__" をチェックするようになりました。この属性があると
、対話モード開始直前にその設定値が引数なしで呼び出されます。このチェッ
クは "PYTHONSTARTUP" ファイルが読み込まれたあとで行われるので、そのフ
ァイル内でセット出来ます。 "site" モジュールは "readline" をサポートす
るプラットフォームではタブ補完と ("~/.python-history" への) 履歴保存を
有効にする関数を __interactivehook__ にセットします 。この (新たな) 振
る舞いがお気に召さなければ、 "PYTHONSTARTUP", "sitecustomize",
"usercustomize" のいずれかで "sys" からこの属性を削除 (あるいはほかの
なにか callable をセット) してください。 (Contributed by Éric Araujo
and Antoine Pitrou in bpo-5845.)


tarfile
-------

"tarfile" モジュールはスクリプトや直接 "-m" で呼ばれた場合、簡単な コ
マンドラインインターフェイス をサポートするようになりました。 これによ
り tar ファイルアーカイブの作成や解凍が可能です。 (Contributed by
Berker Peksag in bpo-13477.)


textwrap
--------

"TextWrapper" に 2 つ新しい制御変数が追加されていて、これらは属性値で
あり、コンストラクタ引数に渡せます。それぞれ "max_lines" が最大出力行
数、 "placeholder" が *max_lines* により切り詰める場合に出力の最終行に
置くテキストです。これら機能を使った新規のコンビニエンス関数
"shorten()" が追加されています。これは入力に含まれる全ての空白文字を単
一の空白に置き換え、また幅 *width* に収めて、切り詰める場合は末尾を
*placeholder* (デフォルトで "[...]") で置き換えて、単一行で返します。
(Contributed by Antoine Pitrou and Serhiy Storchaka in bpo-18585 and
bpo-18725.)


threading
---------

メインスレッドを表現する "Thread" オブジェクトを、新規関数
"main_thread()" で得られるようになりました。通常の条件であればこれは
Python インタプリタを開始したスレッドになります。 (Contributed by
Andrew Svetlov in bpo-18882.)


traceback
---------

新規関数 "traceback.clear_frames()" は、トレースバックオブジェクトを受
け取って、それが参照している全てのフレーム内のローカル変数をクリアする
ことで、メモリ消費量を削減します。 (Contributed by Andrew Kuchling in
bpo-1565525.)


types
-----

新規デスクリプタ "DynamicClassAttribute()" は、そのアクセスがインスタ
ンスからの場合には普通に振舞いつつクラスからのアクセスでは *クラス* の
__getattr__ メソッドに振り向ける属性、これを定義する手段を提供します。
このことにより、インスタンス上ではアクティブなプロパティを持ち、クラス
上では同名の仮想的属性を持つ、といったことが出来ます ("Enum" がこれの
実例になっています)。 (Contributed by Ethan Furman in bpo-19030.)


urllib
------

"urllib.request" が新規クラス "DataHandler" を介して "data:" URL をサ
ポートするようになりました。 (Contributed by Mathias Panzenböck in
bpo-16423.)

"Request" クラスで使われる HTTP メソッドを、サブクラスで "method" 属性
をセットすることにより指定出来るようになりました。 (Contributed by
Jason R Coombs in bpo-18978.) (---訳注: "method" は 3.3 で追加されたが
、コンストラクタに渡されたものが設定されるだけだった。---)

"Request" オブジェクトは今では再利用可能です: "full_url" あるいは
"data" 属性などが変更されると、関連する全ての内部プロパティが更新され
ます。このことによって今や、例えば、 "Request" オブジェクトを、異なる
*data* 引数での "OpenerDirector.open()" の複数回呼び出し内で使ったり、
あるいは、まっさらから作り直すのではなく "Request" の "url" を書き換え
て使ったり出来ます。新たに "remove_header()" メソッドも追加されていて
、これは "Request" からヘッダを取り除きます。 (Contributed by Alexey
Kachayev in bpo-16464, Daniel Wozniak in bpo-17485, and Damien Brecht
and Senthil Kumaran in bpo-17272.)

"HTTPError" オブジェクトに、エラーに関係する HTTP レスポンスヘッダへの
アクセスを提供する "headers" 属性が追加されました。 (Contributed by
Berker Peksag in bpo-15701.)


unittest
--------

The "TestCase" class has a new method, "subTest()", that produces a
context manager whose "with" block becomes a "sub-test".  This context
manager allows a test method to dynamically generate subtests  by,
say, calling the "subTest" context manager inside a loop.  A single
test method can thereby produce an indefinite number of separately
identified and separately counted tests, all of which will run even if
one or more of them fail.  For example:

   class NumbersTest(unittest.TestCase):
       def test_even(self):
           for i in range(6):
               with self.subTest(i=i):
                   self.assertEqual(i % 2, 0)

これは 6 つのサブテストとなり、それぞれは unittest 内の冗長出力におい
て、変数名 "i" とその変数への個々の値 ("i=0", "i=1", など) からなるラ
ベルで識別されます。この例の完全なバージョンが サブテストを利用して繰
り返しテストの区別を付ける にあります。 (Contributed by Antoine Pitrou
in bpo-16997.)

"unittest.main()" の *defaultTest* に、テスト名からなるイテラブルを渡
せるようになりました。以前は文字列で単一のテスト名を渡せるだけでした。
(Contributed by Jyrki Pulliainen in bpo-15132.)

テストディスカバリ最中に発生する "SkipTest" (これはテストファイル内の
モジュールレベルで起こせます) を、エラーとしてではなくスキップとして報
告するようになりました。 (Contributed by Zach Ware in bpo-16935.)

"discover()" が発見したファイルをソートするようになったので、一貫した
テスト順でテスト出来ます。  (Contributed by Martin Melin and Jeff
Ramnani in bpo-16709.)

"TestSuite" がその実行完了次第すぐに、テスト成功していれば、テストへの
参照を取り除くようになりました。ガーベージコレクションを行う Python イ
ンタプリタ上ではこの振る舞いによって、テストへの参照を保持しているもの
が他にない場合のテストのガーベージコレクトを可能にします。この振る舞い
は "TestSuite" をサブクラス化して何もしない "_removeTestAtIndex" を定
義することで上書き出来ます。 (Contributed by Tom Wardill, Matt
McClure, and Andrew Svetlov in bpo-11798.)

テストアサーションの新規コンテキストマネージャ "assertLogs()" が追加さ
れました。これはコードブロックが "logging" を使ってログメッセージを発
行しているか確認します。デフォルトでは任意のロガーからの "INFO" 以上の
プライオリティを持つメッセージを取れますが、ロガー名と最小プライオリテ
ィの両方とも指定可能です。コンテキストマネージャからの戻りオブジェクト
に対して、ログされた "LogRecord" とフォーマットされたメッセージの両方
あるいはどちらかを問い合わせることが出来ます。 (Contributed by Antoine
Pitrou in bpo-18937.)

テストディスカバリが名前空間パッケージで動作するようになりました。
(Contributed by Claudiu Popa in bpo-17457.)

"unittest.mock" オブジェクトが、呼び出しが合致する際に仕様としてのシグ
ニチャを検査するようになりました。これはつまり、以前は位置引数だけの合
致だったものが、位置引数と名前の両方で合致できるようになったということ
です。(Contributed by Antoine Pitrou in bpo-17015.)

"mock_open()" オブジェクトに "readline" メソッドと "readlines" メソッ
ドが追加されました。  (Contributed by Toshio Kuratomi in bpo-17467.)


venv
----

"venv" に "csh" と "fish" シェルの有効化スクリプトが追加されました。
(Contributed by Andrew Svetlov in bpo-15417.)

"EnvBuilder" クラスとコンビニエンス関数 "create()" が新規キーワード引
数 *with_pip* を取るようになりました。デフォルトは "False" です。これ
は "EnvBuilder" が仮想環境に "pip" がインストールされていることを保証
するかどうかを制御します。(Contributed by Nick Coghlan in bpo-19552 as
part of the **PEP 453** implementation.)


wave
----

"getparams()" メソッドがプレインなタプルではなく "namedtuple" を返すよ
うになりました。 (Contributed by Claudiu Popa in bpo-17487.)

"wave.open()" がコンテキスト管理プロトコルをサポートするようになりまし
た。 (Contributed by Claudiu Popa in bpo-17616.)

"wave" は シーク不能なファイルへの書き出しが出来るように なりました。
(Contributed by David Jones, Guilherme Polo, and Serhiy Storchaka in
bpo-5202.)

"writeframesraw()" メソッドと "writeframes()" メソッドが *bytes-like
object* を受け付けるようになりました。 (Contributed by Serhiy
Storchaka in bpo-8311.)


weakref
-------

新規 "WeakMethod" クラスは、インスタンスメソッドへの弱参照をシミュレー
トします。 (Contributed by Antoine Pitrou in bpo-14631.)

新規クラス "finalize" は、弱参照自身のライフサイクルを注意深く管理する
必要性なしに、オブジェクトがガーベージコレクトされる際に呼び出されるコ
ールバックを登録することを可能にします。 (Contributed by Richard
Oudkerk in bpo-15528.)

"ref" に関連付いたコールバック (あれば) を、新規属性 "__callback__" で
取得出来るようになりました。(Contributed by Mark Dickinson in
bpo-17643.)


xml.etree
---------

ノンブロッキングなアプリケーションでの XML ドキュメントの解析に、新規
パーサ "XMLPullParser" を利用出来ます。実例は 非ブロックパースのための
プル API をみてください。 (Contributed by Antoine Pitrou in
bpo-17741.)

"xml.etree.ElementTree" の関数 "tostring()" 、"tostringlist()" と、
"ElementTree" クラスの "write()" メソッドに、 キーワード専用引数 の
*short_empty_elements* が追加されました。これはコンテンツを持たない要
素を省略形 ("<tag />") で書き出すか展開された形 ("<tag></tag>") で書き
出すかを制御します。(Contributed by Ariel Poliak and Serhiy Storchaka
in bpo-14377.)


zipfile
-------

"PyZipFile" クラスの "writepy()" メソッドに *filterfunc* オプションが
追加されました。これはアーカイブにどのディレクトリ・ファイルを加えるの
かをコントロールするのに使うことが出来ます。例えばテスト用ファイルをア
ーカイブから除外する、などということが出来ます。(Contributed by
Christian Tismer in bpo-19274.)

"ZipFile" クラスと "PyZipfile" クラスの *allowZip64* パラメータのデフ
ォルトが "True" に変更されました。 (Contributed by William Mallard in
bpo-17201.)


CPython の実装の変更
====================


PEP 445: CPython のメモリアロケータのカスタマイズ
-------------------------------------------------

**PEP 445** は、CPython インタープリタのメモリ割り当てをカスタマイズす
るために新たな C 水準のインターフェイスを追加しました。

参考:

  **PEP 445** -- Python メモリアロケータをカスタマイズするための新 API
  追加
     PEP written and implemented by Victor Stinner.


PEP 442: オブジェクトの安全なファイナライゼーション
---------------------------------------------------

**PEP 442** は、 CPython でのオブジェクトのファイナライゼーションにま
つわる現在の制限と奇癖を取り除きます。これによって、 "__del__()" メソ
ッドを持つオブジェクトと "finally" 節を持つジェネレータが、それらが循
環参照に含まれる場合もファイナライズ出来ます。(---訳注: ジェネレータの
例については bpo-17468 から派生した bpo-17807 での修正 changeset
83688:c89febab4648 の "Lib/test/test_generators.py" に追加されたテスト
参照。---)

この変更の一環で、モジュールのグローバルは、ほとんどのケースではインタ
プリタのシャットダウン中に強制的に "None" がセットされることはなくなり
、代わりに循環ガーベージコレクタの通常のオペレーションに委ねます。この
ことは、循環 GC が最初に導入されて以来悩みの種だった、普通 "__del__"
メソッドを巻き込んだ「インタプリタシャットダウン時エラーの類」全体を回
避します。(---訳注: bpo-18214 (superseder for bpo-812369), changeset
84936:79e2f5bbc30c ---)

参考:

  **PEP 442** -- オブジェクトの安全なファイナライゼーション
     PEP written and implemented by Antoine Pitrou.


PEP 456: 安全で取り換え可能なハッシュアルゴリズム
-------------------------------------------------

**PEP 456** は、Python のハッシュアルゴリズムで行われた以前のセキュリ
ティ修正作業 --- これは公に曝されている辞書検索に裏打ちされた API が標
的になるかもしれない、特定の DOS 攻撃に対処するものです ---  に追従す
るものです (この改善の現在ラウンドの事の起こりについては bpo-14621 を
見てください)。この PEP では、 CPython のハッシュのコードをパッケージ
ャが異なるハッシュアルゴリズムへの差し替えを容易にするために一元化し、
そして Python のデフォルト実装としては 64 ビットデータ型を持つプラット
フォームで SipHash に乗り換えます。以前の FNV アルゴリズムと比較したど
んなパフォーマンスの差異も、些細なものです。

The PEP adds additional fields to the "sys.hash_info" named tuple to
describe the hash algorithm in use by the currently executing binary.
Otherwise, the PEP does not alter any existing CPython APIs.


PEP 436: Argument Clinic
------------------------

「Argument Clinic」(**PEP 436**) は CPython ビルドプロセスの新たな鍋の
具です。ビルトインと標準ライブラリの拡張モジュールが C で実装されるに
あたって、正確なシグニチャを定義し保守管理するプロセスを単純化するのに
使えます。

Python 3.4 では既にいくつかの標準ライブラリ拡張モジュールが Argument
Clinic を使うように変換されていて、またこれの結果として "pydoc" と
"inspect" が更新されました。

Python 3.4 メンテナンスリリースでの更新の一部として C で実装されている
callable に対して、プログラム的なイントロスペクションのためのシグニチ
ャメタデータの追加が、さらに追加で行われることが期待されています。

注釈:

  Argument Clinic の PEP は、実装されている状態に対して完全には最新の
  ものとはなっていません。Argument Clinic は Python 3.4 ではサードパー
  ティに向けた公開 API として利用可能とする予定ではないので、このケー
  スではリリース管理者とコア開発チームによって許容出来るとみなされまし
  た。

参考:

  **PEP 436** -- The Argument Clinic DSL (訳注: DSL=Domain-Specific
  Language)
     PEP written and implemented by Larry Hastings.


その他のビルド並びに C API の変更
---------------------------------

* "PyType_GetSlot()" 関数が、安定 ABI に追加されました。これにより、制
  限 API を使う際に名前の付いた型のスロットから関数ポインタを取り出す
  ことが出来ます。(Contributed by Martin von Löwis in bpo-17162.) (---
  訳注: 安定 ABI, 制限 API については What's New In Python 3.2 (**PEP
  384**) を参照。---)

* The new "Py_SetStandardStreamEncoding()" pre-initialization API
  allows applications embedding the CPython interpreter to reliably
  force a particular encoding and error handler for the standard
  streams. (Contributed by Bastien Montagne and Nick Coghlan in
  bpo-16129.)

* 文字列引数を変更することのない Python C API のほとんどが、 "char *"
  ではなく適切に "const char *" として宣言されました。 (Contributed by
  Serhiy Storchaka in bpo-1772673.)

* Python インタプリタが利用出来ない場合 (例えばクロスコンパイルのシナ
  リオ) であっても使える、シェルで書き直したバージョンの "python-
  config" が追加されました。

* "PyUnicode_FromFormat()" が "%s", "%A", "%U", "%V", "%S", "%R" につ
  いての幅と精度の指定をサポートするようになりました。 (Contributed by
  Ysj Ray and Victor Stinner in bpo-7330.)

* 既存の "PyStructSequence_InitType()" 関数を補うものとして、
  "PyStructSequence_InitType2()" が追加されました。違いは、これは成功
  時に "0" 、失敗時に "-1" を返すことです。

* CPython のソースを、最近の GCC と clang のアドレスサニティチェック機
  能を使ってコンパイル出来るようにしました: 小さなオブジェクト用アロケ
  ータで起こっていた偽の警報を黙らせました。 (Contributed by Dhiru
  Kholia in bpo-18596.)

* Windows ビルドに アドレス空間配置のランダム化 と データ実行防止 を使
  うようにしました。 (Contributed by Christian Heimes in bpo-16632.)

* "operator.length_hint()" と等価な C API 関数 "PyObject_LengthHint()"
  が追加されました。 (Contributed by Armin Ronacher in bpo-16148.)


その他の改善
------------

* The python command has a new option, "-I", which causes it to run in
  "isolated mode", which means that "sys.path" contains neither the
  script's directory nor the user's "site-packages" directory, and all
  "PYTHON*" environment variables are ignored (it implies both "-s"
  and "-E").  Other restrictions may also be applied in the future,
  with the goal being to isolate the execution of a script from the
  user's environment.  This is appropriate, for example, when Python
  is used to run a system script.  On most POSIX systems it can and
  should be used in the "#!" line of system scripts.  (Contributed by
  Christian Heimes in bpo-16499.)

* "readline" をサポートするプラットフォームで、対話インタプリタでの
  "Tab" キーでの補完がデフォルトで有効になりました。履歴もデフォルトで
  有効となり、 "~/.python-history" に書き込まれ (そしてそこから読み込
  まれ) ます。 (Contributed by Antoine Pitrou and Éric Araujo in
  bpo-5845.)

* Python インタプリタの "--version" での起動時、標準エラーではなく標準
  出力にバージョン情報を出力するようになりました (bpo-18338)。同じ変更
  は "argparse" モジュールに対して (bpo-18920)、また、スクリプトとして
  呼び出せる機能を持つモジュールに対して (bpo-18922) も行われました。

* CPython の Windows インストーラが、拡張子を登録する際に "PATHEXT" に
  ".py" を追加するようになりました。これをするとユーザは、 Windows コ
  マンドプロンプトから Python スクリプトを、 ".py" 拡張子なしでその名
  前だけタイプして実行出来ます。 (Contributed by Paul Moore in
  bpo-18569.)

* A new "make" target coverage-report will build python, run the test
  suite, and generate an HTML coverage report for the C codebase using
  "gcov" and lcov.

* The "-R" option to the python regression test suite now also checks
  for memory allocation leaks, using "sys.getallocatedblocks()".
  (Contributed by Antoine Pitrou in bpo-13390.)

* "python -m" が名前空間パッケージで動くようになりました。

* "stat" モジュールが C で実装されました。これは以前問題であった
  Python モジュール内で値をハードコードすることなく、定数を C ヘッダフ
  ァイルから取りこめることを意味しています。(---訳注: bpo-11016 、特に
  msg127114 以降参照。---)

* 単一の OS モジュール (POSIX の ".so" と Windows の ".dll") からの複
  数 Python モジュールのロードを正しく行えるようになりました (以前は黙
  ってファイル内の最初のモジュールだけが返されていました)。
  (Contributed by Václav Šmilauer in bpo-16421.)

* A new opcode, "LOAD_CLASSDEREF", has been added to fix a bug in the
  loading of free variables in class bodies that could be triggered by
  certain uses of __prepare__.  (Contributed by Benjamin Peterson in
  bpo-17853.)

* Victor Stinner が、彼の **PEP 445** ベースの "pyfailmalloc" ツールを
  用いて数多くのメモリエラー関連のクラッシュを特定し、そして修正しまし
  た。 (bpo-18408, bpo-18520)

* "pyvenv" コマンドに、シンボリックリンクがデフォルトのシステムでもそ
  うせずにコピーを使うようにするための "--copies" オプションが追加され
  ました。 (Contributed by Vinay Sajip in bpo-18807.)

* "pyvenv" コマンドにはさらに、そうしなければ自動的に仮想環境に pip が
  ブートストラップされてしまうのを抑制するための、 "--without-pip" オ
  プションが追加されました。(Contributed by Nick Coghlan in bpo-19552
  as part of the **PEP 453** implementation.)

* 環境変数 "PYTHONIOENCODING" の値内で、エンコーディング名を省略出来る
  ようになりました。つまり、デフォルトエンコーディングを変更することな
  しにエラーハンドラだけをセット出来ます。 (Contributed by Serhiy
  Storchaka in bpo-18818.)

* "bz2"、"lzma"、"gzip" モジュールの "open" 関数が "x" (排他的作成) モ
  ードをサポートするようになりました。 (Contributed by Tim Heaney and
  Vajrasky Kok in bpo-19201, bpo-19222, and bpo-19223.)


大幅な最適化
------------

* UTF-32 デコーダが3-4倍速くなりました。 (Contributed by Serhiy
  Storchaka in bpo-14625.)

* 集合に対するハッシュ衝突のコストが削減されました。ハッシュテーブルの
  個々の検査 (probe) で、ハッシュテーブル全体を通したランダムな検査を
  行う前に、連続する隣接したキー/ハッシュペアをチェックするようになり
  ました。これは、キャッシュ局所性を利用して衝突解決のコストを減らしま
  す。この衝突解決戦略は、リニア検査とオープンアドレッシング法のハイブ
  リッドとして説明できます。追加的なリニア検査の数はデフォルトでは 9
  です。この値は、コンパイル時に LINEAR_PROBES を定義することで任意の
  値に変更できます。リニア検査を完全に無効にするには LINEAR_PROBES=0
  を設定してください。 (Contributed by Raymond Hettinger in
  bpo-18771.)

* インタプリタの起動が約 30% 高速化されました。この速度向上は、いくつ
  かの手段によってもたらされました。インタプリタは起動時により少数のモ
  ジュールをロードするようになりました。例えば "re", "collections",
  "locale" モジュール、およびそれらの依存モジュールは、デフォルトでは
  インポートされません。 marshal モジュールは、コンパイルされた Python
  コードをより高速にロードできるように改善されました。 (Contributed by
  Antoine Pitrou, Christian Heimes and Victor Stinner in bpo-19219,
  bpo-19218, bpo-19209, bpo-19205 and bpo-9548.)

* "bz2.BZ2File" が大半の場合 Python2 のバージョン以上に速くなりました
  。"lzma.LZMAFile" も最適化されました。(Contributed by Serhiy
  Storchaka and Nadeem Vawda in bpo-16034.)

* "random.getrandbits()" が (通常使用される) 小さな整数に対して20%-40%
  早くなりました。 (Contributed by Serhiy Storchaka in bpo-16674.)

* 文字列のストレージ形式を変更したことにより、文字列のピックル化は非常
  に速くなりました。(Contributed by Victor Stinner and Antoine Pitrou
  in bpo-15596.)

* "io.FileIO.readall()" の性能問題が解決されました。これは特に Windows
  に影響し、 "subprocess" を通して大量のデータをパイプで渡しているケー
  スでかなり速度向上します。 (Contributed by Richard Oudkerk in
  bpo-15758.)

* "html.escape()" が10倍速くなりました。(Contributed by Matt Bryant in
  bpo-18020.)

* Windows において、 "obmalloc" で CRT の "malloc" の代わりにネイティ
  ブの "VirtualAlloc" を使うようになりました。人工的なベンチマーク結果
  は、メモリー消費が 3% 減ったことを示しています。

* "os.urandom()" now uses a lazily opened persistent file descriptor
  so as to avoid using many file descriptors when run in parallel from
  multiple threads.  (Contributed by Antoine Pitrou in bpo-18756.)


非推奨
======

このセクションでは、Python 3.4 で非推奨となり Python 3.5 以降で削除予
定となる、様々な API とその他機能性についてをカバーします。(全てではあ
りませんが) ほとんどのケースで、非推奨に対する警告を (たとえば "-Wd"
を使って) 有効にしたインタプリタ起動時、非推奨 API を使うと
"DeprecationWarning" を励起します。


Python API の非推奨項目
-----------------------

* As mentioned in PEP 451: インポートシステムのための ModuleSpec 型, a
  number of "importlib" methods and functions are deprecated:
  "importlib.find_loader()" is replaced by
  "importlib.util.find_spec()";
  "importlib.machinery.PathFinder.find_module()" is replaced by
  "importlib.machinery.PathFinder.find_spec()";
  "importlib.abc.MetaPathFinder.find_module()" is replaced by
  "importlib.abc.MetaPathFinder.find_spec()";
  "importlib.abc.PathEntryFinder.find_loader()" and "find_module()"
  are replaced by "importlib.abc.PathEntryFinder.find_spec()"; all of
  the "*xxx*Loader" ABC "load_module" methods
  ("importlib.abc.Loader.load_module()",
  "importlib.abc.InspectLoader.load_module()",
  "importlib.abc.FileLoader.load_module()",
  "importlib.abc.SourceLoader.load_module()") should no longer be
  implemented, instead loaders should implement an "exec_module"
  method ("importlib.abc.Loader.exec_module()",
  "importlib.abc.InspectLoader.exec_module()"
  "importlib.abc.SourceLoader.exec_module()") and let the import
  system take care of the rest; and
  "importlib.abc.Loader.module_repr()",
  "importlib.util.module_for_loader()", "importlib.util.set_loader()",
  and "importlib.util.set_package()" are no longer needed because
  their functions are now handled automatically by the import system.

* The "imp" module is pending deprecation. To keep compatibility with
  Python 2/3 code bases, the module's removal is currently not
  scheduled.

* "formatter" モジュールが撤廃保留中で、Python 3.6 での削除が計画され
  ています。

* "hmac.new()" 関数の *digestmod* がデフォルトで暗黙に "MD5" を使う仕
  様は撤廃されます。Python 3.6 では *digestmod* 引数には明示的にダイジ
  ェスト名かコンストラクタを渡すことが求められます。

* "ftplib" モジュール内の内部クラス "Netrc" はずっと長いことそのドキュ
  メンテーション文字列内で非推奨であることを謳ってきました。これは今や
  "DeprecationWarning" を発行します。Python 3.5 ではこのクラスは完全に
  削除されます。

* "subprocess.Popen.wait()" の文書化されていない引数 *endtime* は本来
  曝してはいけないものでしたので、使用されていないことを願っています。
  これは非推奨ですし、確実に Python 3.5 では削除されるのではないでしょ
  うか。(---訳注: 3.5 では削除はされませんでしたが、もちろん使用しない
  でください。これは内部用です。---)

* "HTMLParser" の *strict* 引数は非推奨です。

* "plistlib" モジュールに追加された "load()", "dump()", "loads()",
  "dumps()" により、対応する "readPlist()", "writePlist()",
  "readPlistFromBytes()", "writePlistToBytes()" が非推奨となりました。
  同じく単に "bytes" コンストラクタを使えば良いので "Data()" が非推奨
  となりました。

* "sysconfig" のキー "SO" は非推奨です。これは "EXT_SUFFIX" に取って代
  わられました。

* 種々の "open" 関数で受け付けられていた "U" モードは非推奨となりまし
  た。Python 3 ではこれは何も役に立つことはしません。
  "io.TextIOWrapper" (必要ならば)、 *newline* 引数を適切に使うことによ
  って置き換えられるはずです。

* "xml.etree.ElementTree.iterparse()" の *parser* 引数と "XMLParser()"
  の *html* 引数が非推奨となりました。後者は (訳注: 第一引数のため) 削
  除に備えて "XMLParser" への全ての引数はキーワード引数として渡すよう
  にしてください。


非推奨の機能
------------

* IDLE --- Python editor and shell の "-n" フラグでの実行 (サブプロセ
  スを起こさない) は非推奨となりました。ただし、この機能は bpo-18823
  が解決するまでは削除はされません。

* "site" モジュールは "site-python" ディレクトリが存在すればこれを
  sys.path に加えていましたが、これは非推奨となりました。 (bpo-19375)


削除
====


サポートされなくなったオペレーティングシステム
----------------------------------------------

以下の OS 向けのソースとビルドツールは削除されました。

* OS/2 (bpo-16135)。

* Windows 2000 (changeset e52df05b496a)。

* "COMSPEC" が "command.com" を指している Windows システム
  (bpo-14470).

* VMS (bpo-16136)。


API と機能の削除
----------------

時代遅れとなり、以前に既に非推奨となった以下の API と機能が削除されま
した:

* 保守されていなかった "Misc/TextMate" と "Misc/vim" ディレクトリは削
  除されました (代わりに何が使えるかの提案は devguide をみてください
  --- 訳注: おそらく Additional Resources に挙げられている wiki を指し
  ている ---)。

* makefile のマクロ "SO"  は削除されました (これは "SHLIB_SUFFIX" マク
  ロと "EXT_SUFFIX" マクロで置き換えられました) (bpo-16754)。

* "PyThreadState.tick_counter" フィールドは削除されました。これは
  Python 3.2 で「新しい GIL」が導入された際に意味をなくしていました。
  (bpo-19199).

* "PyLoader" と "PyPycLoader" が "importlib" から削除されました。
  (Contributed by Taras Lyapun in bpo-15641.)

* "HTTPConnection" と "HTTPSConnection" の *strict* 引数は削除されまし
  た。 HTTP 0.9 スタイルの 「Simple Responses」はもはやサポートされま
  せん。

* "urllib.request.Request" の非推奨となっていた getter/setter メソッド
  の "add_data", "has_data", "get_data", "get_type", "get_host",
  "get_selector", "set_proxy", "get_origin_req_host",
  "is_unverifiable" は削除されました (代わりに属性アクセスを直接使って
  ください)。

* 非推奨の "TYPE_INT64" ロードのサポートが "marshal" から削除されまし
  た。  (Contributed by Dan Riti in bpo-15480.)

* "inspect.Signature": 位置専用パラメータを示すのに今では正当な名前が
  必要です。

* object 自身の "object.__format__()" はもはや空でないフォーマット文字
  列を受け付けず、 "TypeError" を投げます。空でない文字列を渡すことは
  既に Python 3.2 で非推奨となっていました。この変更は以前は動作した (
  そして正しくない) コードが、オブジェクトが __format__ メソッドを得る
  ことで処理に失敗し始めていた状況を防ぐ目的でなされました。この変更が
  意味することはあなたのコードにとって、それを処理する __format__ メソ
  ッドを持たないオブジェクトに "s" フォーマットコードを使うと
  "TypeError" を起こしうるようになった、ということです。背景については
  bpo-7994 を参照して下さい。 (---訳注: このパラグラフの中盤が非常にわ
  かりにくい表現で訳者も意味を取りきれていませんが、おそらく Python
  2.6/3.0 で動作していた例えば "format(1+1j, '10s')" が Python 2.7/3.1
  で動作しなくなったことを指しているのだと思います。問題にされているの
  は動作しなくなったことではなくてむしろ動作していたことで、そして
  object.__format__ が return str(self).__format__(fmt) で実現されてい
  ること。このコードでは fmt は何らの意味も持っていませんので、これは
  一貫性に欠ける要因である、とのことで、「わかりやすく拒絶する」ことが
  真意であるようです ---)

* Python 3.2 で非推奨となった "difflib.SequenceMatcher.isbjunk()" およ
  び "difflib.SequenceMatcher.isbpopular()" は削除されました: *sm* が
  "SequenceMatcher" であるとして、 "x in sm.bjunk" と "x in
  sm.bpopular" を使うようにしてください。 (bpo-13248)


コードの整理
------------

* "pydoc" モジュールで、使用されておらず文書化もされていなかった内部的
  な "Scanner" クラスが削除されました。

* ひどく壊れていた OSX システムで呼ばれる可能性があるのみだった
  "platform" モジュールの非公開関数 "_mac_ver_lookup",
  "_mac_ver_gstalt", "_bcd2str" とあわせて、非公開かつ実質的に未使用だ
  った "_gestalt" モジュールが削除されました。 (see bpo-18393)

* "tarfile" モジュールの名前空間内に "stat" 定数群がハードコードでコピ
  ーされていましたが、これは削除されました。


Python 3.4 への移植
===================

このセクションでは前述の変更とバグフィックスにより必要となるかもしれな
いコードの変更を列挙します:


'python' コマンドの挙動の変更
-----------------------------

* POSIX シェルでは、環境変数 "PATH" に空の値をセットすることは、何もセ
  ットしないことと同じです。ところが "PYTHONPATH" に空の値をセットする
  ことは、何もセットしないことと *まったく同じではありませんでした*:
  "PYTHONPATH" に空の値をセットすると、 "." をセットしたのと同じ意味に
  なっていて、これは "PATH" での振舞いから類推しようとすると混乱を招く
  ものでした。この振る舞いは "PATH" での POSIX の慣習に従うように改め
  られました。

* CPython インタプリタのデバッグビルド ("--with-pydebug") での出力 [X
  refs, Y blocks] がデフォルトではオフになりました。 "-X showrefcount"
  オプション起動で再度有効に出来ます。 (Contributed by Ezio Melotti in
  bpo-17323.)

* **python** コマンドとほとんどの標準ライブラリスクリプト (また
  "argparse" も) において、 "--version" が情報出力を "stderr" ではなく
  "stdout" に行うようになりました (issue へのリンクは その他の改善 セ
  クション内参照)。


Python API の変更
-----------------

* "importlib.abc" 内に定義されている ABC は、無分別に
  "NotImplementedError" を投げるのではなく、相応しい例外を投げるかデフ
  ォルト値を返すかのどちらかになりました。このことは "super()" を呼び
  出して ABC がするがままに任せているコードにのみ影響します。互換性の
  ために、必要であれば "NotImplementedError" とその投げられる新たな例
  外の両方を捕捉してください。

* The module type now initializes the "__package__" and "__loader__"
  attributes to "None" by default. To determine if these attributes
  were set in a backwards-compatible fashion, use e.g.
  "getattr(module, '__loader__', None) is not None".  (bpo-17115.)

* "importlib.util.module_for_loader()" now sets "__loader__" and
  "__package__" unconditionally to properly support reloading. If this
  is not desired then you will need to set these attributes manually.
  You can use "importlib.util.module_to_load()" for module management.

* インポートがリロードの際に無条件に関連属性 (例えば "__name__",
  "__loader__", "__package__", "__file__", "__cached__") をリセットす
  るようになりました。これは、3.3 以前のリロードの際にモジュールを再発
  見する振る舞いと同じものを復元するものであるということを注記しておき
  ます。 (bpo-19413)

* 凍結パッケージ (frozen package) はもはや "__path__" にパッケージ名を
  含むリストをセットせず、空リストをセットします。この以前の振る舞いは
  、凍結パッケージと同じ名前を持つディレクトリが存在する場合のサブモジ
  ュールのインポートで、インポートシステムが間違ったことを起こしうるも
  のでした。モジュールがパッケージなのかそうでないのかを決める正しい方
  法は、 "hasattr(module, '__path__')" を使うことです。 (bpo-18065)

* Frozen modules no longer define a "__file__" attribute. It's
  semantically incorrect for frozen modules to set the attribute as
  they are not loaded from any explicit location. If you must know
  that a module comes from frozen code then you can see if the
  module's "__spec__.location" is set to "'frozen'", check if the
  loader is a subclass of "importlib.machinery.FrozenImporter", or if
  Python 2 compatibility is necessary you can use "imp.is_frozen()".

* "py_compile.compile()" が書き込み先ファイルパスがシンボリックリンク
  か非レギュラーファイルの場合に "FileExistsError" を投げるようになり
  ました。これは、警告の役割を果たすためです、インポートがファイルパス
  の元のファイルタイプが何かによらずに、それらファイルをレギュラーファ
  イルで上書きすることの。

* ソースコードをロードしようとして "SyntaxError" かもしくは
  "UnicodeDecodeError" を引き起こした場合に、
  "importlib.abc.SourceLoader.get_source()" はそれを "ImportError" に
  読み替えて投げることをしなくなりました。 "ImportError" はそうあるべ
  きなのに見つからない場合にのみ投げられるべきなので、ソースコードが見
  つかったけれども正しくない構造である場合の意味にまで及ぶのは、手を伸
  ばし過ぎで過負荷です。ImportError を捕捉していたコードで今後とも構文
  エラーとデコーディングの問題を無視したいと望むならば、これら 3 つ全
  ての例外を捕捉するようにしてください。 (訳注: changeset
  84172:e353f64dfd95 )

* "functools.update_wrapper()" と "functools.wraps()" が、たとえその関
  数も "__wrapped__" を持っていたとしても正しくその関数が包まれるよう
  に "__wrapped__" 属性値をセットするようになりました。つまり
  "__wrapped__" 属性は、以前のようにチェイン内の全ての "__wrapped__"
  属性が最も内側の関数を参照するのではなく、デコレートされた関数の積み
  上げを正しくリンクするようになったということです。以前の振る舞いが意
  図されたものであると思い込んでいたイントロスペクションライブラリの作
  者は、チェインの中の最初の関数 ("__wrapped__" 属性を持たない) にアク
  セスするのに "inspect.unwrap()" を使えます。(---訳注: bpo-17482. わ
  かりにくいので実例で。中で適切に @wrap を使うデコレータ @deco1、
  @deco2 があるとして、my_func をこの両方でデコレートするとします。こ
  の場合に、Python 3.3 までは "my_func.__wrapped__.__wrapped__" が
  AttributeError になります。今回のこの修正で
  "my_func.__wrapped__.__wrapped__" は期待通りに振舞います。 ---)

* "inspect.getfullargspec()" は、 "inspect.signature()" を前提とした再
  実装がなされました。これにより、かつて扱えていたよりも遥かに広い種類
  の呼び出し可能 (callable) を扱うようになりました (訳注: 例えば
  "open()" などは Python 3.3 までは扱えなかった)。Python 3.4 系列の経
  過のなかで、追加で組み込みや拡張モジュールの callable がシグニチャの
  メタデータを持つことが期待されています。 "inspect.getfullargspec()"
  が非 Python callable で失敗することを前提としたコードは、適宜調整の
  必要があるかもしれません。

* "importlib.machinery.PathFinder" は "sys.path_hooks" 内のオブジェク
  トに、空文字列の場合は現在作業ディレクトリを渡すようになりました。結
  果の "sys.path_importer_cache" が決して "''" を含まないことになるの
  で、 "sys.path" に基いて "sys.path_importer_cache" を巡回しても全て
  のキーを見つけられません。インタプリタを "-m" で起動した場合も含め、
  現在作業ディレクトリ内でインポートされた際のモジュールの "__file__"
  も絶対パスで持つようになりました (ただしスクリプトがコマンドラインか
  ら相対パスを使って直接実行された際の "__main__.__file__" を除きます
  (Contributed by Brett Cannon in bpo-18416))。 (bpo-18416)

* "HTTPConnection" と "HTTPSConnection" から *strict* 引数が削除された
  ことは、残りの引数をキーワード引数としてではなく位置引数として使って
  いたなら意味が変わってしまいます。非推奨警告に注意を払ってきたのであ
  れば、あなたのコードは既に全てのオプショナル引数をキーワードで渡して
  いるはずです。

* "from __future__ import ..." ステートメントの間に文字列が含まれる場
  合に *常に* "SyntaxError" となるようになりました。以前はモジュールの
  docstring が先頭にある場合とない場合で振る舞いが違っていて、ない場合
  にこのエラーが意図せず無視される場合がありました。この修正は CPython
  を言語仕様に準拠させるものです。Jython と PyPy では既にこれが行われ
  ています。 (bpo-17434)

* "ssl.SSLSocket.getpeercert()" と "ssl.SSLSocket.do_handshake()" は、
  "SSLSocket" が未接続時に以前は "AttributeError" を投げていましたが、
  "ENOTCONN" を持った "OSError" を投げるように改められました。加えて
  "getpeercert()" はハンドシェイクが未実施の場合に "ValueError" を投げ
  るようになりました。

* "base64.b32decode()" が入力文字列が非 b32 文字を含む場合に
  "TypeError" ではなく "binascii.Error" を投げるようになりました。今回
  のこの "TypeError" はほか (訳注: if the input is incorrectly padded
  のとき) の "TypeError" が置き換えられた際に置き換え忘れられたもので
  した。 (Contributed by Serhiy Storchaka in bpo-18011.) 注意: この修
  正は後方互換性を保てないので本来メンテナンスリリースの Python 3.3 に
  は入るべきではなかったのですが、不注意で Python 3.3.3 にも行われてし
  まいました。

* The "file" attribute is now automatically closed when the creating
  "cgi.FieldStorage" instance is garbage collected. If you were
  pulling the file object out separately from the "cgi.FieldStorage"
  instance and not keeping the instance alive, then you should either
  store the entire "cgi.FieldStorage" instance or read the contents of
  the file before the "cgi.FieldStorage" instance is garbage
  collected.

* クローズ済みの SSL ソケットに対する "read" や "write" 呼び出しで、以
  前のようなミステリアスな "AttributeError" ではなく、役に立つ
  "ValueError" を投げるようになりました。 (bpo-9177)

* "slice.indices()" が巨大な値で "OverflowError" を起こすことはなくな
  りました。この修正からの流れで "slice.indices()" は負の値に対して
  "ValueError" を投げるようになっています。以前はこれは馬鹿げた値を返
  していました。 (bpo-14794)

* 特殊メソッド "__complex__" が複素数ではなく "float" を返す実装をして
  いるオブジェクトを渡すと "cmath" 関数ではエラーとなり、 "complex" コ
  ンストラクタでは受け容れられていましたが、これはいずれも "TypeError"
  となるように改められました。(bpo-16290.)

* 3.2 と 3.3 での "int" コンストラクタが *base* パラメータとして誤って
  "float" を許容してしまっていました。それをわざわざやっているとも思え
  ないですが、そうしていたなら今後は "TypeError" になります。
  (bpo-16772)

* キーワード専用引数へのデフォルト値が、通常のキーワード引数へのデフォ
  ルト値評価の *あとで* 評価されるようになりました。前ではなく。望むら
  くは誰一人以前のバギーな振る舞いに頼っちゃうおバカなコードを書いてい
  ませんように。願います。 (bpo-16967)

* 古いスレッド状態が "fork()" 後にクリアされるようになりました。これに
  より、以前は不適切に永遠に生き残ってしまっていたいくつかのシステムリ
  ソース (たとえば、スレッドローカル記憶内に維持されたデータベース接続
  ) が解放されるようになります。 (bpo-17094.)

* Parameter names in "__annotations__" dicts are now mangled properly,
  similarly to "__kwdefaults__". (Contributed by Yury Selivanov in
  bpo-20625.)

* "hashlib.hash.name" が識別子を常に小文字で返すようになりました。以前
  はいくつかの組み込みハッシュが大文字名を持っていましたが、公式インタ
  ーフェイスであることから、命名に一貫性を持たせるようにしました。
  (bpo-18532)

* Because "unittest.TestSuite" now drops references to tests after
  they are run, test harnesses that reuse a "TestSuite" to re-run a
  set of tests may fail.   Test suites should not be re-used in this
  fashion since it means state is retained between test runs, breaking
  the test isolation that "unittest" is designed to provide.  However,
  if the lack of isolation is considered acceptable, the old behavior
  can be restored by creating a "TestSuite" subclass that defines a
  "_removeTestAtIndex" method that does nothing (see
  "TestSuite.__iter__()") (bpo-11798).

* "unittest" がコマンドライン解析に "argparse" を使うようになりました
  。このことで、以前は動作していた不当なコマンド形式で許されなくなった
  ものがあります。理屈から言えばこれは後方互換性の問題ではないはずです
  。許されなくなったコマンド形式は意味をなしていなかったものですから、
  使われていたとは思えません。

* 関数 "re.split()", "re.findall()", "re.sub()" と、 "match" オブジェ
  クトのメソッド "group()", "groups()" は、操作対象が *bytes-like
  object* である場合に常に *bytes* オブジェクトを返すようになりました
  。以前は戻り値型は入力型に合わせられていました。戻り値の型がたとえば
  "bytearray" になることに依存していたのであれば、コードを修正する必要
  があります。

* "audioop" functions now raise an error immediately if passed string
  input, instead of failing randomly later on (bpo-16685).

* "HTMLParser" の新規引数 *convert_charrefs* は現在は後方互換性維持の
  ために "False" をデフォルトとしていますが、最終的には "True" がデフ
  ォルトになります。あなたのコードでは "HTMLParser" の全ての呼び出しで
  これをキーワード引数として明示することをお勧めします。 (bpo-13633)

* "hmac.new()" 関数の *digestmod* 引数からデフォルト値が消える予定です
  。ので、 "hmac.new()" 呼び出しは常に *digestmod* を明示するように修
  正すべきです。 (bpo-17276)

* "sysconfig.get_config_var()" にキー "SO" を渡すことと
  "sysconfig.get_config_vars()" の呼び出し結果から "SO" キーを探すこと
  は非推奨です。このキーは文脈依存の "EXT_SUFFIX" または
  "SHLIB_SUFFIX" で置き換えられるべきです。 (bpo-19555)

* "open" 系関数にモード "U" を使っていたコードは修正すべきです。 "U"
  は Python 3 では無力であり、いずれはこれの使用は例外を投げるようにな
  る予定です。使う関数に依存しますが、 *newline* 引数を使うか、あるい
  は必要であればストリームを "TextIOWrapper" でラップしてその
  *newline* 引数を使うことで、その古い Python 2 の振る舞いと同等なもの
  を実現出来ます。 (bpo-15204)

* スクリプト内から "pyvenv" を使っていて、pip がインストール *されない
  * ことを望むならば、コマンド呼び出しに "--without-pip" を追加しなけ
  ればなりません。

* indent を明示した場合の "json.dump()" と "json.dumps()" のデフォルト
  の振る舞いが変更されました。要素を区切るカンマが行末に来る場合の後ろ
  に、空白を追加しなくなりました。これはその出力のテストを空白に繊細な
  比較をすることで行っている場合にだけ問題になります。 (bpo-16333)

* "doctest" が拡張モジュールの "__doc__" 文字列から doctest を見つける
  ようになったので、doctest のテストディスカバリが拡張モジュールを含ん
  でいてその中で doctest のようにみえるものが含まれていると、テスト実
  行時にこれまで見かけたことのないテスト失敗を目にするかもしれません。
  (bpo-3158)

* "collections.abc" モジュールが、Python スタートアップの改善の一環で
  少々リファクタリングが行われました。これの結果として "collections"
  は自動で "collections.abc" をインポートしなくなりました。もしもこの
  (文書化されていなかった) 暗黙でのインポートに依存していたのであれば
  、 "import collections.abc" として明示的にインポートを追加する必要が
  あります。 (bpo-20784)


C API の変更
------------

* いくつかの内部 C API とともに "PyEval_EvalFrameEx()",
  "PyObject_Repr()", "PyObject_Str()" に、現在アクティブな例外を黙殺す
  る状況で使われていないことを確かにするためのデバッグアサーションが仕
  込まれました。アクティブな例外を捨てることが期待されて望ましいケース
  (たとえば、既にローカルに "PyErr_Fetch()" で保存済みであるとか、異な
  る例外に置き換えることが意図である場合) は、アサーション有効でコンパ
  イルされている Python バージョンで実行して、(直接的・間接的によらず)
  それら操作呼び出しがそのアサーションを発行するのを、明示的に
  "PyErr_Clear()" 呼び出しをすることで潰してください。

* "PyErr_SetImportError()" が **msg** がセットされていない場合に
  "TypeError" をセットするようになりました。以前は例外をセットすること
  なく "NULL" を返すだけでした。

* "PyOS_ReadlineFunctionPointer" コールバックは、エラー時に "NULL" を
  返すか "PyMem_RawMalloc()" または "PyMem_RawRealloc()" でアロケート
  した文字列を返さなければなりません。 "PyMem_Malloc()" や
  "PyMem_Realloc()" でアロケートした文字列はダメです。 (bpo-16742)

* "PyThread_set_key_value()" が必ず値をセットするようになりました。
  Python 3.3 ではこの関数はキーが既存 (で現在値が "NULL" ポインタでな
  い) の場合には何もしませんでした。

* "PyFrameObject" 構造体のフィールド "f_tstate" (thread state) が、バ
  グをフィックスするために削除されました: 論拠については bpo-14432 を
  参照してください。


3.4.3 の変更
============


PEP 476: stdlib http クライアントが証明書の検証を行うのをデフォルトで有効化
---------------------------------------------------------------------------

"http.client" とこのモジュールを使っている例えば "urllib.request" や
"xmlrpc.client"  が、サーバをプラットフォームが持つ信頼ストアにある CA
により署名された証明書で検証し、そのホスト名がリクエストされたホスト名
かどうかのチェックをデフォルトで行うようになりました。これは多くのアプ
リケーションにとって大幅なセキュリティ改善になります。

以前の古い振る舞いが必要なアプリケーションでは、代わりとなるコンテキス
トを渡せます:

   import urllib.request
   import ssl

   # This disables all verification
   context = ssl._create_unverified_context()

   # This allows using a specific certificate for the host, which doesn't need
   # to be in the trust store
   context = ssl.create_default_context(cafile="/path/to/file.crt")

   urllib.request.urlopen("https://invalid-cert", context=context)
