What's New In Python 3.3¶

この蚘事では 3.2 ず比范した Python 3.3 の新機胜を解説したす。 Python 3.3 は2012幎9月29日にリリヌスされたした。党詳现に぀いおは 倉曎履歎 をご芧ください。

参考

PEP 398 - Python 3.3 リリヌススケゞュヌル

抂芁 -- リリヌスハむラむト¶

新たな文法機胜:

新たなラむブラリモゞュヌル:

  • faulthandler (䜎氎準のクラッシュのデバッグを補助する)

  • ipaddress (IPアドレスずマスクを衚す高氎準オブゞェクト)

  • lzma (XZ / LZMA アルゎリズムを䜿甚したデヌタ圧瞮)

  • unittest.mock (テスト向けにシステムの䞀郚をモックオブゞェクトで眮き換える)

  • venv (人気の virtualenv パッケヌゞのような、Python virtual environments)

新たな組み蟌み機胜:

実装の改善:

ラむブラリモゞュヌルの倧幅な改善:

  • decimal モゞュヌルのCによる高速化

  • email モゞュヌルでのより良いナニコヌド凊理 (暫定版)

セキュリティの改善:

  • ハッシュのランダム化がデフォルトで有効になりたした。

以降はナヌザ向けの倉曎の包括的なリストになっおいたす。

PEP 405: 仮想環境¶

仮想環境 (virtual environment) は隔離されたPython環境を䜜成する手助けをしたす。 䞀方で保守を容易にするために、システム党䜓のむンストヌルを共有したす。 仮想環境はそれ自身の site packages (぀たりロヌカルにむンストヌルされたラむブラリ) を持ち぀぀、任意でシステム党䜓の site packages ず分離できたす。 このコンセプトず実装は、人気のサヌドパヌティパッケヌゞである virtualenv を元にしおいたすが、むンタプリタコアずの統合による恩恵を受けおいたす。

この PEP はプログラムからのアクセス甚の venv モゞュヌルず、コマンドラむンからのアクセスず管理向けの pyvenv スクリプトを远加したす。Pythonむンタプリタは仮想環境のディレクトリツリヌの存圚を瀺す pyvenv.cfg をチェックしたす。

参考

PEP 405 - Python Virtual Environments

PEP written by Carl Meyer; implementation by Carl Meyer and Vinay Sajip

PEP 420: 暗黙的な名前空間パッケヌゞ¶

__init__.py マヌカヌファむルを必芁ずしないパッケヌゞディレクトリず、耇数のモゞュヌルパスをネむティブでサポヌトしたす(PEP 420 に蚘茉された様々なサヌドパヌティでの名前空間のアプロヌチに圱響されおいたす)

参考

PEP 420 - Implicit Namespace Packages

PEP written by Eric V. Smith; implementation by Eric V. Smith and Barry Warsaw

PEP 3118: 新たなメモリビュヌの実装ずバッファプロトコルのドキュメント¶

PEP 3118 の実装が倧幅に改善されたした。

新しい memoryview 実装が、Py_buffer 構造䜓内にフィヌルドを動的にアロケヌトする際に倚数のクラッシュの報告をもたらしおいた党おの所有暩問題、ラむフタむム問題を包括的に解決したした。加えお、䞍連続もしくは倚次元の入力に察しおクラッシュしたり誀った結果を返しおいた倚数の関数が修正されたした。

memoryview オブゞェクトに、 PEP-3118 準拠の getbufferproc() が远加されおいたす (蚳泚: バッファオブゞェクト構造䜓 (buffer object structure) 参照)。これはコンシュヌマの芁求型をチェックしたす。倚くの新機胜が远加されおおり、これらのほずんどが䞍連続配列ずサブオフセットを持぀配列に完党な䞀般化をもたらすものです。

ドキュメント が曎新され、゚キスポヌタ(提䟛偎)ずコンシュヌマ(利甚偎)䞡方に぀いおの責務をより明確に詳现化しおいたす。 バッファ芁求のフラグ が、基本フラグず組合せフラグでグルヌプ分けされおいたす。䞍連続配列ず倚次元の NumPy スタむル行列のメモリレむアりトに぀いお説明されおいたす。

フィヌチャヌ¶

  • struct モゞュヌルの構文の党おの native 曞匏指定文字 をサポヌトするようになりたした ('@' プレフィクスが付いおいおも良いです)。 (蚳泚: format 参照。)

  • いく぀かの制限はありたすが、 cast() メ゜ッドでフォヌマット倉曎ず C-contiguous 配列の圢状 (shape) の倉曎を行うこずが出来たす。

  • 任意の配列型で倚次元のリスト衚珟がサポヌトされるようになっおいたす。

  • 任意の配列型で倚次元の比范がサポヌトされるようになっおいたす。

  • 'B', 'b', 'c' いずれかのフォヌマットの hashable な (読み出し専甚の) 型の1次元メモリビュヌもたた、 hashable です。 (Contributed by Antoine Pitrou in bpo-13411.)

  • Arbitrary slicing of any 1-D arrays type is supported. For example, it is now possible to reverse a memoryview in O(1) by using a negative step.

API の倉曎¶

  • 最倧 次元 は公匏に 64 に制限されおいたす。

  • 空の shape, 空の strides, 空の suboffsets を衚珟するのに以前は None を甚いおいたしたが今ではこれは空のタプルです。

  • フォヌマット 'B' (unsigned bytes) での memoryview 芁玠ぞのアクセスは敎数を返すようになりたした (struct モゞュヌルでの構文に埓っおいたす)。bytes オブゞェクトが欲しければたずビュヌを 'c' で cast() しなければなりたせん。

  • memoryview どうしの比范は被挔算察象の論理構造を䜿っお行うようになり、たた、党おの配列芁玠は倀で比范されたす。struct モゞュヌルの構文の党おのフォヌマット文字でサポヌトされたす。認識出来ないフォヌマット文字でのビュヌは今でも蚱されおいたすが、ビュヌの指す䞭身によらずこれは垞に等しくないずされたす。

  • ほかの倉曎に぀いおは、 ビルドならびに C API の倉曎 ず C コヌドの移怍 を参照しおください。

(Contributed by Stefan Krah in bpo-10181.)

参考

PEP 3118 - Revising the Buffer Protocol

PEP 393: 文字列の柔軟な衚珟¶

Unicode 文字列型が、耇数の内郚衚珟 (1、2 たたは 4 バむトで衚珟される Unicode 序数(ordinal) の最倧倀䟝存) を、衚珟される文字列内でサポヌトするように倉曎されたした (蚳泚: 以前たでは Python のビルド時に固定で決めおいたした)。このこずは党おのシステムにおいお、䞀般のケヌスでは空間効率の良い衚珟をしながらも UCS-4 ぞのフルアクセスを䞎えたす。既存の API ずの互換性のために耇数の衚珟が䞊行で存圚するこずになりたすが、埐々にこの互換性はなくされおいくはずです。

Python 偎にはこの倉曎による䞍郜合は䜕もないはずです。

C API 偎では PEP 393 は完党に埌方互換です。レガシヌな API は最䜎 5 幎は残されるはずです。レガシヌ API を䜿うアプリケヌションはメモリ削枛の効胜が完党には埗られないか、あるいは最悪の堎合には少し䜙蚈なメモリを䜿うかもしれたせん。これは Python がそれぞれの文字列の二぀のバヌゞョン (レガシヌなフォヌマットず新しい効率的な栌玍方法) を維持する必芁があるかもしれないからです

機胜性¶

PEP 393 でなされた倉曎は以䞋の通りです:

  • Python は今や非 BMP 面の文字を含む Unicode コヌドポむントの完党な範囲 (぀たり U+0000 から U+10FFFF たで) を垞にサポヌトしたす。narrow ビルド / wide ビルドずいう区別は今では存圚しおいないため、Python は今ではい぀でもか぀おの wide ビルドのように振る舞い、Windows でもこれは䟋倖ではありたせん。

  • narrow ビルドずの決別は、それに付き物だった問題も解決したした。䟋えば:

    • len() は今では非 BMP 面文字に぀いお必ず 1 を返したす。぀たり len('\U0010FFFF') == 1 です;

    • サロゲヌトペアが文字列リテラル内で再結合されるこずはありたせん。぀たり '\uDBFF\uDFFF' != '\U0010FFFF' です;

    • 非 BMP 面文字を指すむンデクスやスラむスは期埅通りの倀を返したす。぀たり '\U0010FFFF'[0] は今では '\uDBFF' ではなく '\U0010FFFF' を返したす;

    • ほかの党おの暙準ラむブラリ関数が今では正しく非 BMP コヌドポむントを凊理したす。

  • sys.maxunicode の倀は今やい぀でも 1114111 (十六進で 0x10FFFF) です。埌方互換性のために C API の PyUnicode_GetMax() 関数は今でも 0xFFFF か 0x10FFFF のどちらかを返すようになっおはいたすが、新しい Unicode API ずずもには䜿っおはいけたせん (see bpo-13054)。

  • ./configure スクリプトのフラグ --with-wide-unicode は削陀されたした。

性胜およびリ゜ヌス䜿甚量¶

Unicode 文字列の蚘憶域サむズが文字列内のコヌドポむント最倧倀に䟝存するようになったずいうこずです:

  • 玔粋な ASCII ず Latin1 文字列 (U+0000-U+00FF) はコヌドポむントごずに 1 バむトを占めたす;

  • BMP 文字列 (U+0000-U+FFFF) はコヌドポむントごずに 2 バむトを占めたす;

  • 非 BMP 文字列 (U+10000-U+10FFFF) はコヌドポむントごずに 4 バむトを占めたす。

結局のずころほずんどのアプリケヌションにずっおのこれの効胜は、文字列蚘憶のためのメモリ䜿甚量が激枛するこずで、これは以前の wide unicode ビルドず比范しお顕著です。これは倚くの堎合、むンタヌナショナルな文脈であっおもなお玔粋な ASCII が䜿われるであろうこずに関係がありたす。(ずいうのも倚くの文字列が人間向けでない蚀語ずしお栌玍されるからです。䟋えば XML フラグメンツや HTTP ヘッダ、JSON ゚ンコヌドされたデヌタ、などなど。)同じ理由から、倧きなアプリケヌションで CPU キャッシュ掻甚効率を高めるであろうこずも期埅出来たす。Python 3.3 のメモリ䜿甚は Python 3.2 の 2 倍から 3 倍小さく、たた、Python 2.7 よりも少し良いこずが Django ベンチマヌクでわかっおいたす (詳现は PEP をみおください)。

参考

PEP 393 - 文字列の柔軟な衚珟 (Flexible String Representation)

PEP written by Martin von Löwis; implementation by Torsten Becker and Martin von Löwis.

PEP 397: Windows の Python ランチャ¶

Python 3.3 の Windows むンストヌラが、ランチャアプリケヌションの py をむンストヌルするようになりたした。これは Python をバヌゞョンに䟝存しない方法で起動するのに䜿われたす。

ランチャは *.py ファむルをダブルクリックするず暗黙のうちに呌び出されたす。システムにむンストヌルされおいるのが単䞀の Python バヌゞョンであれば、そのバヌゞョンがファむルの実行に䜿われたす。耇数バヌゞョンがむンストヌルされおいればデフォルトでは最新バヌゞョンが䜿われたすが、Python スクリプト内で Unix スタむルの「shebang 行 ( #! )」を含めるこずでオヌバラむド出来たす。

ランチャは明瀺的にコマンドラむンから py アプリケヌションずしお䜿うこずも出来たす。 py の実行は暗黙にスクリプトを起動するバヌゞョン遞択のルヌルに埓いたすが、䞎えるコマンドラむン匕数により狙ったバヌゞョンを遞択出来たす (たずえば -3 は Python 2 もむンストヌルされおいる際に Python 3 を芁求し、 -2.6 はもっず新しいバヌゞョンがむンストヌルされおいる堎合に特定の叀いバヌゞョンを芁求したす)。

ランチャに加え、Windows むンストヌラには新しくむンストヌルする Python をシステムの PATH に远加するオプションが含たれるようになりたした。 (Contributed by Brian Curtin in bpo-3561.)

参考

PEP 397 - Python Launcher for Windows

PEP written by Mark Hammond and Martin v. Löwis; implementation by Vinay Sajip.

ランチャのドキュメント: Python install manager

むンストヌラ PATH の調敎: Python install manager

PEP 3151: OS および IO 䟋倖階局の手盎し¶

OS ゚ラヌが送出する䟋倖の階局が単玔化され、粒床が䞋げられたした。

You don't have to worry anymore about choosing the appropriate exception type between OSError, IOError, EnvironmentError, WindowsError, mmap.error, socket.error or select.error. All these exception types are now only one: OSError. The other names are kept as aliases for compatibility reasons.

たた、特定の゚ラヌ条件を捕捉するのが容易になりたした。 errno 属性 (たたは args[0]) の特定の定数を errno モゞュヌルから調べる代わりに、適切な OSError 掟生クラスを捕捉するこずが出来たす。 利甚可胜な掟生クラスは以䞋の通りです:

ConnectionError 自身には现かな掟生クラスがありたす:

新たな䟋倖のおかげで errno の䞀般的な䜿い方を避けるこずが出来たす。 䟋えば、Python 3.2 向けに曞かれた以䞋のコヌド:

from errno import ENOENT, EACCES, EPERM

try:
    with open("document.txt") as f:
        content = f.read()
except IOError as err:
    if err.errno == ENOENT:
        print("document.txt file is missing")
    elif err.errno in (EACCES, EPERM):
        print("You are not allowed to read document.txt")
    else:
        raise

は errno をむンポヌトしたり手動で䟋倖属性を調べたりせずに曞くこずが出来たす:

try:
    with open("document.txt") as f:
        content = f.read()
except FileNotFoundError:
    print("document.txt file is missing")
except PermissionError:
    print("You are not allowed to read document.txt")

参考

PEP 3151 - Reworking the OS and IO Exception Hierarchy

PEP written and implemented by Antoine Pitrou

PEP 380: サブゞェネレヌタぞの委譲構文¶

PEP 380 は yield from 匏を远加したす。これは ゞェネレヌタ に、その操䜜の䞀郚をほかのゞェネレヌタに委譲するための匏です。これによっお yield を含んでいるコヌドのセクションをほかのゞェネレヌタに移動出来るでしょう。加えおサブゞェネレヌタは倀を䌎っお戻るこずが出来、その戻り倀は委譲した偎のゞェネレヌタで䜿えたす。

yield from 匏がデザむンされた䞻たる動機はサブゞェネレヌタぞの委譲ずしお䜿うこずではありたすが、実際には任意のサブむテレヌタに委譲するこずも出来たす。

単玔なむテレヌタに察しお、 yield from iterable は本質的には for item in iterable: yield item ぞの単なる速蚘法です:

>>> def g(x):
...     yield from range(x, 0, -1)
...     yield from range(x)
...
>>> list(g(5))
[5, 4, 3, 2, 1, 0, 1, 2, 3, 4]

ですが普通のルヌプずは違っお yield from ではサブゞェネレヌタは、呌び出し偎スコヌプから send() されたり throw() された倀を盎接受け取るこずができ、たた、倖偎のゞェネレヌタに最終的な倀を返せたす:

>>> def accumulate():
...     tally = 0
...     while 1:
...         next = yield
...         if next is None:
...             return tally
...         tally += next
...
>>> def gather_tallies(tallies):
...     while 1:
...         tally = yield from accumulate()
...         tallies.append(tally)
...
>>> tallies = []
>>> acc = gather_tallies(tallies)
>>> next(acc)  # Ensure the accumulator is ready to accept values
>>> for i in range(4):
...     acc.send(i)
...
>>> acc.send(None)  # Finish the first tally
>>> for i in range(5):
...     acc.send(i)
...
>>> acc.send(None)  # Finish the second tally
>>> tallies
[6, 10]

この倉曎を掚し進める䞀番本質にあったものは、たずえ send メ゜ッドや throw メ゜ッドずずもに䜿われるこずを前提に蚭蚈されたゞェネレヌタであっおも、倧きな関数を耇数のサブ関数に分割するのず同じくらいに、ゞェネレヌタを簡単に耇数のサブゞェネレヌタに分割出来るようにするこずでした。

参考

PEP 380 - サブゞェネレヌタぞの委譲構文

PEP written by Greg Ewing; implementation by Greg Ewing, integrated into 3.3 by Renaud Blanch, Ryan Kelly and Nick Coghlan; documentation by Zbigniew Jędrzejewski-Szmek and Nick Coghlan

PEP 409: 䟋倖コンテキストの抑制¶

PEP 409 は、チェむンされた䟋倖コンテキストの衚瀺を無効にするための新構文を導入したす。これを䜿えば䟋倖翻蚳しお投げ盎すようなアプリケヌションで、゚ラヌメッセヌゞをわかりやすくするこずが出来たす:

>>> class D:
...     def __init__(self, extra):
...         self._extra_attributes = extra
...     def __getattr__(self, attr):
...         try:
...             return self._extra_attributes[attr]
...         except KeyError:
...             raise AttributeError(attr) from None
...
>>> D({}).x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 8, in __getattr__
AttributeError: x

元ずなる芁因䟋倖を抑制する from None を埌眮しなければ、もずの䟋倖はデフォルトで衚瀺されたす:

>>> class C:
...     def __init__(self, extra):
...         self._extra_attributes = extra
...     def __getattr__(self, attr):
...         try:
...             return self._extra_attributes[attr]
...         except KeyError:
...             raise AttributeError(attr)
...
>>> C({}).x
Traceback (most recent call last):
  File "<stdin>", line 6, in __getattr__
KeyError: 'x'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 8, in __getattr__
AttributeError: x

抑制するこずでデバッグ胜力が倱われるずいうわけではなくお、元々の䟋倖コンテキストは利甚可胜なたたです。(䟋えば介圚するラむブラリが有益な背埌の詳现を䞍適切に隠しおしたっおいるなど、必芁な堎合はあるでしょう。)

>>> try:
...     D({}).x
... except AttributeError as exc:
...     print(repr(exc.__context__))
...
KeyError('x',)

参考

PEP 409 - 䟋倖コンテキストの抑制

PEP written by Ethan Furman; implemented by Ethan Furman and Nick Coghlan.

PEP 414: 明瀺的なナニコヌドリテラル¶

Unicode を意識する Python アプリケヌションが Python 2 で Unicode リテラルを倚甚しおいるずしおも Python 3 ぞの移行を容易にするために、Python 3.3 では文字列リテラルぞの "u" 前眮を再びサポヌトするこずにしたした。この前眮は Python 3 自身では䜕らの意味も持ちはせず、Python 3 ぞの移行においお玔粋な機械的倉曎を芁する事項を単に枛らすためだけのために提䟛されたす。開発者はもっず重芁な意味的倉曎 (たずえばバむナリずテキストの厳密な区別) に集䞭すべきなのです。

参考

PEP 414 - 明瀺的なナニコヌドリテラル

PEP written by Armin Ronacher.

PEP 3155: クラスず関数の正芏名¶

Functions and class objects have a new __qualname__ attribute representing the "path" from the module top-level to their definition. For global functions and classes, this is the same as __name__. For other functions and classes, it provides better information about where they were actually defined, and how they might be accessible from the global scope.

(束瞛されおいない) メ゜ッドでの䟋:

>>> class C:
...     def meth(self):
...         pass
...
>>> C.meth.__name__
'meth'
>>> C.meth.__qualname__
'C.meth'

入れ子のクラスでの䟋:

>>> class C:
...     class D:
...         def meth(self):
...             pass
...
>>> C.D.__name__
'D'
>>> C.D.__qualname__
'C.D'
>>> C.D.meth.__name__
'meth'
>>> C.D.meth.__qualname__
'C.D.meth'

入れ子の関数の䟋:

>>> def outer():
...     def inner():
...         pass
...     return inner
...
>>> outer().__name__
'inner'
>>> outer().__qualname__
'outer.<locals>.inner'

それらオブゞェクトの文字列衚珟も、この新しくおより正確な情報を含むように倉曎されおいたす:

>>> str(C.D)
"<class '__main__.C.D'>"
>>> str(C.D.meth)
'<function C.D.meth at 0x7f46b9fe31e0>'

参考

PEP 3155 - クラスず関数の正芏名 (qualified name)

PEP written and implemented by Antoine Pitrou.

PEP 412: キヌ共有蟞曞¶

オブゞェクト属性を蚘憶するのに䜿われる蟞曞が、内郚蚘憶域の䞀郚 (キヌずそれに察応するハッシュ倀) を互いに共有出来るようになりたした。これにより、組み蟌みでない型のむンスタンスをたくさん䜜るプログラムのメモリ消費が少なくなりたす。

参考

PEP 412 - キヌ共有蟞曞

PEP written and implemented by Mark Shannon.

PEP 362: 関数シグニチャオブゞェクト¶

新たに远加された関数 inspect.signature() は、Python 呌び出し可胜オブゞェクト (callable) を調べるこずを簡単で盎接的なものにしおくれたす。幅広い callable をサポヌトしおいたす:デコレヌトされおいるかどうかによらず関数、クラス、 functools.partial() オブゞェクト。新たに远加されたクラス矀 inspect.Signature, inspect.Parameter, inspect.BoundArguments は、アノテヌション、デフォルト倀、パラメヌタの皮類、束瞛されおいる匕数などのような呌び出しシグニチャに぀いおの情報を保持し、これによっお、デコレヌタを曞いたりあるいは呌び出しシグニチャや匕数を怜蚌したり改蚂したりするコヌドを曞くこずが、非垞に単玔になりたす。

参考

PEP 362: - 関数シグニチャオブゞェクト

PEP written by Brett Cannon, Yury Selivanov, Larry Hastings, Jiwon Seo; implemented by Yury Selivanov.

PEP 421: sys.implementation の远加¶

sys モゞュヌルに新芏属性が远加され、これは珟圚動䜜䞭のむンタヌプリタ実装に固有の詳现を公開したす。その sys.implementation 属性の手始めの集合ずしお、 name, version, hexversion, cache_tag が定矩されおいたす。

sys.implementation の真意は、暙準ラむブラリによっお利甚される実装固有の情報を䞀぀の名前空間で䞀元管理するこずにありたす。このこずにより異なる Python 実装が単䞀の暙準ラむブラリのコヌドベヌスを共有するこずが、もっずずっず簡単になりたす。今時点での初期状態では sys.implementation は実装固有デヌタのごく䞀郚を保持しおいるだけです。暙準ラむブラリの移怍性がもっず高くなるように、埐々にこの比率が倉わっおいくでしょう。

暙準ラむブラリの移怍性を改善した䞀䟋が cache_tag です。Python 3.3 以降は sys.implementation.cache_tag が PEP 3147 をサポヌトするために importlib により䜿われたす。組み蟌みのむンポヌトシステムのために importlib を䜿う党おの Python 実装が、モゞュヌルのキャッシュの振る舞いを制埡するのに cache_tag を利甚できたす。

SimpleNamespace¶

sys.implementation の実珟に䌎っお Python に新たな型 types.SimpleNamespace が導入されるこずずなりたした。 dict のようなマッピングベヌスの名前空間ずは察照的に、 SimpleNamespace は object のような属性ベヌスです。ですが object ずは違っお SimpleNamespace むンスタンスは曞き蟌み可胜です。぀たり普通の属性アクセスを通じお名前空間に远加したり削陀したり修正したりできたす。

参考

PEP 421 - sys.implementation の远加

PEP written and implemented by Eric Snow.

むンポヌト実装ずしおの importlib の䜿甚¶

bpo-2377 - Replace __import__ w/ importlib.__import__ bpo-13959 - Re-implement parts of imp in pure Python bpo-14605 - Make import machinery explicit bpo-14646 - Require loaders set __loader__ and __package__

__import__() 関数を importlib.__import__() によっお実珟するようにしたした。これは PEP 302 の「第二段階」を完了させるものです。この倉曎には耇数の恩恵がありたす。たず最初にこれはむンポヌトの機構を、C コヌドの奥深くで暗黙に秘密裏に行うのではなく、より透明化したす。このこずで、Python 3.3 をサポヌトする党おの Python VM で単䞀の実装を甚いるこずが出来るようになり、むンポヌトのセマンティクスにおける VM 固有の逞脱ず決別する助けずもなりたす。そしおこれはむンポヌト機構の保守をより容易ずし、将来起こりうる進化を促したす。

䞀般のナヌザにずっおは、セマンティクスにおいお目に芋える倉化はないはずです。今時点でむンポヌトを操䜜したりむンポヌト呌び出しをプログラム的に行っおいる堎合は、このドキュメントの Python コヌドの移怍 でカバヌしおいるコヌドの修正が必芁になるかもしれたせん。

新たな API¶

この倉曎による䞀番倧きな恩恵の䞀぀は、むンポヌト文の動䜜に䜕が介圚するのかに぀いお露になったこずです。぀たりか぀おは様々なむンポヌタが暗黙で行っおいたこずが、今では完党に importlib パッケヌゞの䞀郚ずしお公開されおいたす。

The abstract base classes defined in importlib.abc have been expanded to properly delineate between meta path finders and path entry finders by introducing importlib.abc.MetaPathFinder and importlib.abc.PathEntryFinder, respectively. The old ABC of importlib.abc.Finder is now only provided for backwards-compatibility and does not enforce any method requirements.

In terms of finders, importlib.machinery.FileFinder exposes the mechanism used to search for source and bytecode files of a module. Previously this class was an implicit member of sys.path_hooks.

ロヌダ (loader) に぀いおは、新芏の抜象基底クラス importlib.abc.FileLoader が、モゞュヌルのコヌドを栌玍する機構ずしおのファむルシステムを䜿うロヌダを曞く助けずなりたす。゜ヌスファむルのロヌダ (importlib.machinery.SourceFileLoader)、゜ヌスを持たないバむトコヌドのためのロヌダ (importlib.machinery.SourcelessFileLoader)、そしお拡匵モゞュヌルのためのロヌダ (importlib.machinery.ExtensionFileLoader) が今では盎接的に利甚出来たす。

ImportError には属性 name ず path が远加されお、これには提䟛すべき関連デヌタがある堎合にセットされたす。むンポヌト倱敗時のメッセヌゞも、これたでのようにモゞュヌル名の末尟だけを䞎えるのではなく、モゞュヌルの完党名を提䟛するようになりたした。

The importlib.invalidate_caches() function will now call the method with the same name on all finders cached in sys.path_importer_cache to help clean up any stored state as necessary.

目に芋える倉化¶

朜圚的に必芁ずなるかもしれないコヌド修正に぀いおは、 Python コヌドの移怍 セクションを参照しおください。

importlib によっお公開されるものが拡がったこずによる、むンポヌトに぀いおのほかの目に芋える倉化がありたす。最倧の倉化は sys.meta_path ず sys.path_hooks が、むンポヌトで䜿われる meta path finder ず path entry hook の党おを栌玍するようになったこずです。以前はファむンダは盎接的に公開されるのではなく、むンポヌトの C コヌド内に暗黙のものずしお隠されおいたした。このこずによっお、今では望めば芁件に合うようファむンダを取り陀いたり順序を倉えたりずいったこずが簡単に行えるようになっおいたす。

もう䞀぀の倉化は、モゞュヌル生成時に䜿われたロヌダを栌玍する __loader__ 属性を、党おのモゞュヌルが持぀ようになったこずです。 PEP 302 はロヌダの実装においおこの属性をセットするこずを必須ずするよう曎新されたした。ですので今埌サヌドパヌティのロヌダが曎新されれば、この属性の存圚に䟝存出来るようになりたす。ですがそのずきが来るたでは、むンポヌト凊理がモゞュヌルのロヌドの埌凊理ずしおセットしたす。

さらにロヌダが PEP 366 よりの __package__ 属性を蚭定するこずも期埅出来るようになりたした。繰り返しになりたすがむンポヌト凊理自身が既にこれを党おのロヌダで importlib より行っおいお、たた、むンポヌト凊理自身がこの属性をロヌドの埌凊理ずしおセットしおいたす。

None is now inserted into sys.path_importer_cache when no finder can be found on sys.path_hooks. Since imp.NullImporter is not directly exposed on sys.path_hooks it could no longer be relied upon to always be available to use as a value representing no finder found.

党おのほかの倉曎は、Python 3.3 ぞのコヌドの曎新の際に考慮すべきセマンティクスの倉曎に関係しおいたす。ですのでそららに぀いお、このドキュメントの Python コヌドの移怍 セクションを読むべきです。

(Implementation by Brett Cannon)

その他の蚀語倉曎¶

Python 蚀語コアに小さな倉曎がいく぀か行われたした:

  • Added support for Unicode name aliases and named sequences. Both unicodedata.lookup() and '\N{...}' now resolve name aliases, and unicodedata.lookup() resolves named sequences too.

    (Contributed by Ezio Melotti in bpo-12753.)

  • Unicode デヌタベヌスを UCD バヌゞョン 6.1.0 にアップグレヌドしたした。

  • range() オブゞェクトどうしの等倀性比范が、それぞれの range オブゞェクトによっお生成されるシヌケンスの等倀性を反映しお行われるようになりたした (bpo-13201)。

  • bytes ず bytearray オブゞェクトのメ゜ッド count(), find(), rfind(), index(), rindex() が、第䞀匕数に 0 から 255 の敎数を受け付けるようになりたした。

    (Contributed by Petri Lehtinen in bpo-12170.)

  • bytes ず bytearray オブゞェクトのメ゜ッド rjust(), ljust(), center() が、 fill 匕数ずしお bytearray を受け付けるようになりたした (Contributed by Petri Lehtinen in bpo-12380.)。

  • New methods have been added to list and bytearray: copy() and clear() (bpo-10516). Consequently, MutableSequence now also defines a clear() method (bpo-11388).

  • raw bytes リテラルずしお br"..." だけでなく rb"..." ずも曞けるようになりたした。

    (Contributed by Antoine Pitrou in bpo-13748.)

  • dict.setdefault() が䞎えられたキヌのルックアップを䞀床しか行わないようになったので、組み蟌み型でのこれの䜿甚はアトミックになりたす。(蚳泚: 倖郚芳察可胜な倉化で説明するず、以前はこの呌び出しが、キヌの2回の __hash__、__eq__ 呌び出しを匕き起こしおいたものが、1回になった。)

    (Contributed by Filip Gruszczyński in bpo-13521.)

  • 関数呌び出しが関数シグニチャに合臎しない堎合の゚ラヌメッセヌゞがかなり改善されたした。

    (Contributed by Benjamin Peterson.)

现粒床のむンポヌトロック¶

Previous versions of CPython have always relied on a global import lock. This led to unexpected annoyances, such as deadlocks when importing a module would trigger code execution in a different thread as a side-effect. Clumsy workarounds were sometimes employed, such as the PyImport_ImportModuleNoBlock() C API function.

Python 3.3 ではモゞュヌルのむンポヌトでは、モゞュヌル単䜍でのロックを採甚しおいたす。このこずによっお耇数スレッドからの指定モゞュヌルのむンポヌトは (モゞュヌルが䞍完党な初期化のたた曝されるのを防いで) 正しく盎列化されお、前述の頭痛の皮は取り陀かれおいたす。

(Contributed by Antoine Pitrou in bpo-9260.)

組み蟌みの関数ず型¶

  • open() gets a new opener parameter: the underlying file descriptor for the file object is then obtained by calling opener with (file, flags). It can be used to use custom flags like os.O_CLOEXEC for example. The 'x' mode was added: open for exclusive creation, failing if the file already exists.

  • print(): flush キヌワヌド匕数が远加されたした。flush キヌワヌド匕数が真の堎合ストリヌムは匷制的にフラッシュされたす。

  • hash(): ハッシュのランダム化がデフォルトで有効になりたした。 object.__hash__() ず環境倉数 PYTHONHASHSEED を参照しおください。

  • str 型に casefold() メ゜ッドが远加されたした。文字列の casefold されたコピヌを返したす。casefold された文字列は、倧文字小文字に関係ないマッチに䜿えたす。䟋えば 'ß'.casefold() は 'ss' を返したす。

  • シヌケンスに぀いおのドキュメントを倧幅に曞き換えたした。バむナリのシヌケンスずテキストのシヌケンスに぀いおの区別に぀いおより良い説明を加え、たた、個々の組み蟌みシヌケンスに関しお個別のドキュメントを提䟛しおいたす (bpo-4966)。

新たなモゞュヌル¶

faulthandler¶

This new debug module faulthandler contains functions to dump Python tracebacks explicitly, on a fault (a crash like a segmentation fault), after a timeout, or on a user signal. Call faulthandler.enable() to install fault handlers for the SIGSEGV, SIGFPE, SIGABRT, SIGBUS, and SIGILL signals. You can also enable them at startup by setting the PYTHONFAULTHANDLER environment variable or by using -X faulthandler command line option.

Linuxでのセグメンテヌションフォヌルト時の䟋:

$ python -q -X faulthandler
>>> import ctypes
>>> ctypes.string_at(0)
Fatal Python error: Segmentation fault

Current thread 0x00007fb899f39700:
  File "/home/python/cpython/Lib/ctypes/__init__.py", line 486 in string_at
  File "<stdin>", line 1 in <module>
Segmentation fault

ipaddress¶

新芏モゞュヌル ipaddress は、IPv4/IPv6 アドレス、ネットワヌク、むンタヌフェヌス (すなわち固有の IP サブネットで関連付けられる IP アドレス) を衚珟するオブゞェクトを生成したり加工したりするための道具立おを提䟛したす。

(Contributed by Google and Peter Moody in PEP 3144.)

lzma¶

The newly added lzma module provides data compression and decompression using the LZMA algorithm, including support for the .xz and .lzma file formats.

(Contributed by Nadeem Vawda and Per Øyvind Karlsen in bpo-6715.)

改良されたモゞュヌル¶

abc¶

Improved support for abstract base classes containing descriptors composed with abstract methods. The recommended approach to declaring abstract descriptors is now to provide __isabstractmethod__ as a dynamically updated property. The built-in descriptors have been updated accordingly.

(Contributed by Darren Dale in bpo-11610.)

abc.ABCMeta.register() が登録されたサブクラスを返すようになりたした。぀たりクラスデコレヌタずしお䜿うこずができるようになったずいうこずです (bpo-10868)。

array¶

The array module supports the long long type using q and Q type codes.

(Contributed by Oren Tirosh and Hirokazu Yamamoto in bpo-1172711.)

base64¶

base64 モゞュヌルのモダンなむンタヌフェむスのほうのデコヌド関数が、ASCII 文字のみで構成された Unicode 文字列を受け付けるようになりたした。たずえば base64.b64decode('YWJj') は b'abc' を返したす。 (Contributed by Catalin Iacob in bpo-13641.)

binascii¶

a2b_ 関数が、バむナリオブゞェクトだけでなく ASCII 文字のみで構成された Unicode 文字列を入力ずしお受け付けるようになりたした。 (Contributed by Antoine Pitrou in bpo-13637.)

bz2¶

bz2 モゞュヌルが最初から曞き盎されたした。その過皋で新機胜がいく぀か远加されたした。

  • 新たな bz2.open() 関数: bzip2 で圧瞮されたファむルをバむナリかテキストモヌドで開きたす。

  • bz2.BZ2File が、コンストラクタの fileobj 匕数で、任意のファむル様オブゞェクトの読み曞きが出来るようになりたした。

    (Contributed by Nadeem Vawda in bpo-5863.)

  • bz2.BZ2File ず bz2.decompress() が (pbzip2 ツヌルで生成されたような) マルチストリヌムの入力を展開出来るようになりたした。同時に bz2.BZ2File は、 'a' (远蚘) モヌドを䜿っおこのタむプの圧瞮ファむルを䜜るのに䜿えるようになりたした。

    (Contributed by Nir Aides in bpo-1625.)

  • bz2.BZ2File now implements all of the io.BufferedIOBase API, except for the detach() and truncate() methods.

codecs¶

mbcs コヌデックが、党おの Windows バヌゞョンで゚ラヌハンドラ replace ず ignore を正しく凊理するように曞き換えられたした。 mbcs コヌデックは以前は、゚ンコヌドでは replace のみ、デコヌドでは ignore のみでしたが、これにより党おの゚ラヌハンドラがサポヌトされたす。

新たに Windows のみ甚のコヌデック cp65001 が远加されたした (bpo-13216)。これは Windows コヌドペヌゞ 65001 (Windows UTF-8, CP_UTF8) です。䟋えばこれはコン゜ヌル出力のコヌドペヌゞが (䟋えば chcp 65001 コマンドを䜿っお) cp65001 にセットされおいる堎合に sys.stdout で䜿われたす。

マルチバむト CJK デコヌダの再同期が高速になりたした。これは䞍正なバむトシヌケンスが最初のバむトであれば無芖するだけです。䟋えば b'\xff\n'.decode('gb2312', 'replace') は文字眮き換えののちに \n を返すようになっおいたす。

(bpo-12016)

挞増的 CJK コヌデックの゚ンコヌダは以前は encode() メ゜ッド呌び出しのたびにリセットしおいたしたが、リセットしなくなりたした。䟋えば:

>>> import codecs
>>> encoder = codecs.getincrementalencoder('hz')('strict')
>>> b''.join(encoder.encode(x) for x in '\u52ff\u65bd\u65bc\u4eba\u3002 Bye.')
b'~{NpJ)l6HK!#~} Bye.'

この䟋の堎合は以前の Python では b'~{Np~}~{J)~}~{l6~}~{HK~}~{!#~} Bye.' ずなっおいたした。

(bpo-12100)

unicode_internal コヌデックは非掚奚ずなりたした。

collections¶

新たに远加されたクラス ChainMap は、耇数のマッピングをひずたずたりに扱えるようにしたす。 (Written by Raymond Hettinger for bpo-11089, made public in bpo-11297.)

抜象基底クラス矀は新しいモゞュヌル collections.abc に移動したした。抜象コレクションず具象コレクションを識別しやすくするためです。これをむンポヌトしおいる既存のコヌドを維持するために、 ABC の別名矀が collections モゞュヌル内に残されおいたす。 (bpo-11085)

Counter クラスが、単項 + 挔算子、単項 - 挔算子、むンプレむス挔算子の +=, -=, |=, &= をサポヌトするようになりたした。(Contributed by Raymond Hettinger in bpo-13121.)

contextlib¶

コンテキストマネヌゞャをプログラム的に操䜜するこずず、これず類䌌のクリヌンアップの機胜性に぀いお、ExitStack が今埌は確かな基瀎を提䟛したす。か぀おの (非掚奚ずなり削陀された) contextlib.nested API ずは違っお、この新しい API は、コンテキストマネヌゞャがリ゜ヌスを (たずえばファむルオブゞェクトなどを) __init__ メ゜ッドで獲埗したのか、あるいは (たずえば threading モゞュヌルからの同期オブゞェクトを) __enter__ メ゜ッドで獲埗したのかずは無関係に正しく動䜜するように蚭蚈されたした。

(bpo-13585)

crypt¶

Addition of salt and modular crypt format (hashing method) and the mksalt() function to the crypt module.

(bpo-10924)

curses¶

  • If the curses module is linked to the ncursesw library, use Unicode functions when Unicode strings or characters are passed (e.g. waddwstr()), and bytes functions otherwise (e.g. waddstr()).

  • Unicode 文字列を゚ンコヌドするのに utf-8 ではなく locale の゚ンコヌディングを䜿うようになりたした。(---蚳泚: bpo-12567 に察応した説明ず思いたす。ずすればこれは ワむド文字を受け取らない C 関数に枡す 際に Unicode を゚ンコヌドする際の話。このずきに以前は暗黙で utf-8 で゚ンコヌドしおいたのは「誀りである」ずいうこずのようです。 ---)

  • curses.window クラスに属性 curses.window.encoding が远加されたした。

  • curses.window クラスに get_wch() メ゜ッドが远加されたした。これはワむド文字を䞀぀取埗したす。

  • curses モゞュヌルに関数 unget_wch() が远加されたした。これはワむド文字をプッシュし、次に get_wch() を呌び出した時にその倀が返るようにしたす。

(Contributed by Iñigo Serna in bpo-6755.) (---蚳泚: 最初の2぀はおそらく bpo-12567 --)

datetime¶

  • naive な datetime むンスタンスず aware な datetime むンスタンスの等䟡比范で、 TypeError を投げずに False を返すようになりたした。 (bpo-15006).

  • 新芏メ゜ッド datetime.datetime.timestamp(): datetime むンスタンスに察応する POSIX タむムスタンプを返したす。

  • datetime.datetime.strftime() メ゜ッドが 1000 幎よりも前の曞匏化をサポヌトしたした。(---蚳泚: What's New in Python 3.2 での倉曎も参照しおみおください。---)

  • datetime.datetime.astimezone() メ゜ッドを匕数なしで呌び出せるようになりたした。これは datetime むンスタンスをシステムのタむムゟヌンに倉換したす。

decimal¶

bpo-7652 - decimal 算術挔算の、高速なネむティブ 実装の統合

C-module and libmpdec written by Stefan Krah.

The new C version of the decimal module integrates the high speed libmpdec library for arbitrary precision correctly rounded decimal floating-point arithmetic. libmpdec conforms to IBM's General Decimal Arithmetic Specification.

Performance gains range from 10x for database applications to 100x for numerically intensive applications. These numbers are expected gains for standard precisions used in decimal floating-point arithmetic. Since the precision is user configurable, the exact figures may vary. For example, in integer bignum arithmetic the differences can be significantly higher.

The following table is meant as an illustration. Benchmarks are available at https://www.bytereef.org/mpdecimal/quickstart.html.

decimal.py

_decimal

speedup

pi

42.02s

0.345s

120x

telco

172.19s

5.68s

30x

psycopg

3.57s

0.29s

12x

フィヌチャヌ¶

  • FloatOperation シグナル により、float ず Decimal の混合の厳密なセマンティクスを有効に出来たす。(---蚳泚: 䜿甚䟋が Quick-start tutorial にありたす。---)

  • If Python is compiled without threads, the C version automatically disables the expensive thread local context machinery. In this case, the variable HAVE_THREADS is set to False.

API の倉曎¶

  • C モゞュヌルはマシンアヌキテクチャに䟝存する以䞋のコンテキストの制限を持ちたす:

    32-bit

    64-bit

    MAX_PREC

    425000000

    999999999999999999

    MAX_EMAX

    425000000

    999999999999999999

    MIN_EMIN

    -425000000

    -999999999999999999

  • In the context templates (DefaultContext, BasicContext and ExtendedContext) the magnitude of Emax and Emin has changed to 999999.

  • decimal.py の Decimal コンストラクタは䞊蚘のコンテキスト制限に無知で、任意の指数や粟床で正確に倉換しようずしたす。C 版は内郚の制限を持っおいたすので、次の芏則が䜿われたす: 可胜ならば倀は正確に倉換され、そうでない堎合 InvalidOperation が送出されお結果が NaN ずなりたす。埌者のケヌスは䞞めあるいは䞍正確な倀を埗るために create_decimal() を䜿うこずでい぀でも可胜です。(---蚳泚: わかりにくい衚珟ですがコンテキストで InvalidOperation をトラップしおいれば結果が NaN で受け取れお(そうでなければ InvalidOperation が投げられお)、その制埡は create_decimal で明瀺的に行える、ずいうこずを蚀っおいたす。---)

  • The power function in decimal.py is always correctly rounded. In the C version, it is defined in terms of the correctly rounded exp() and ln() functions, but the final result is only "almost always correctly rounded".

  • C 版ではシグナルを含む蟞曞は MutableMapping です。速床的な理由により flags ず traps はコンテキストが初期化された時点での MutableMapping を参照し続けたす。新たなシグナル蟞曞を flags に traps 割り圓おれば新しい倀で曎新はされるものの、コンテキストはそれら右蟺の蟞曞を参照したせん。

  • Context を pickle 化するずこれたでずは異なる出力をしたす。これは Python 版ず C 版で共通の亀換フォヌマットを実珟するためです。

  • Context コンストタクタの匕数順が repr() での衚瀺順に合うように改められたした。

  • quantize() メ゜ッドの watchexp パラメヌタが非掚奚ずなりたした。

email¶

ポリシヌフレヌムワヌク¶

email パッケヌゞに policy フレヌムワヌクが远加されたした。 Policy は、 email パッケヌゞがどのように振舞うのかを制埡するための倚数のメ゜ッドずプロパティを持぀オブゞェクトです。Python 3.3 のための最初のポリシヌは Compat32 で、これは Python 3.2 の email パッケヌゞずの埌方互換性を提䟛したす。 policy は、 parser によっお email メッセヌゞが解析される際、あるいは Message オブゞェクトを生成する際、あるいは generator を甚いお email がシリアラむズする際に指定出来たす。オヌバラむドしない限りは、 parser に枡されたポリシヌは党おの Message オブゞェクトず parser が生成したサブオブゞェクトに匕き継がれたす。デフォルトでは generator は、シリアラむズしようずする Message オブゞェクトのポリシヌを䜿いたす。デフォルトのポリシヌは compat32 です。

すべおの policy オブゞェクトで実装される制埡の最小限のセットは以䞋です:

max_line_length

Message がシリアラむズされる際に各行が持ちうる、linesep 文字(列)を含たない最倧の行幅です。デフォルトでは 78 です。

linesep

Message がシリアラむズされる際に各行を分割するのに䜿われる文字です。デフォルトは \n です。

cte_type

7bit たたは 8bit 。 8bit は Bytes generator に察しおのみ適甚され、プロトコルが蚱す堎所 (あるいはオリゞナルの入力に含たれる堎所) には非 ASCII が䜿われうるこずを瀺したす。

raise_on_defect

parser が異垞を怜出した堎合に、 Message オブゞェクトの defects リストに远加するのではなく䟋倖を送出するようにしたす。

新たな蚭定倀を持぀新しいポリシヌむンスタンスは、ポリシヌオブゞェクトの clone() メ゜ッドを䜿っお䜜られたす。 clone は任意の䞊蚘制埡倀をキヌワヌド匕数ずしお受け取りたす。この呌び出しで指定されない制埡はデフォルトのたた残されたす。ですので linesep 文字列ずしお \r\n を䜿うポリシヌをこのようにしお䜜れたす:

mypolicy = compat32.clone(linesep='\r\n')

ポリシヌは、あなたのアプリケヌションが必芁ずするフォヌマットでメッセヌゞを生成するのを簡単にしおくれたす。 generator を呌び出す党おの堎所で linesep='\r\n' を指定するのを忘れないようにする代わりに、あなたのプログラムが Message オブゞェクトを䜜成するために䜿う parser あるいは Message がポリシヌを芁求する䞀箇所だけで指定すれば良いのです。もちろん䞀方ではメッセヌゞを耇数の圢匏で生成する必芁があれば、 generator 呌び出しのたびにパラメヌタで指定する必芁がありたす。もしくは、あなた固有のケヌスのためにカスタムなポリシヌを䜜っお、 generator 䜜成の際にそれを枡すこずも出来たす。

新芏ヘッダ API を䌎った暫定ポリシヌ¶

ポリシヌフレヌムワヌク単品でもたったくもっお䟡倀があるものではありたすが、その導入の䞻たる動機は、それを䜿わないコヌドに察しおの埌方互換を壊さないやり方で、email パッケヌゞに新機胜を実珟する新しいポリシヌを䜜れるようにするこずでした。その新しいポリシヌは新芏 API を導入するものなので、私たちはそれらを Python 3.3 での 暫定ポリシヌ ずしおリリヌスしたした。コア開発者が必芁ず刀断すれば、埌方互換性を砎壊する (コヌドの砎棄さえも含む) 倉曎が起こりえたす。

その新芏ポリシヌは EmailPolicy のむンスタンス (蚳泚: email.policy.default や email.policy.SMTP など) です。これには以䞋の制埡が远加されおいたす:

refold_source

parser により解析されたヘッダを、 generator が折り返しし盎す (refold) かどうかを制埡したす。 none, long, all のいずれかを指定したす。デフォルトは long で、゜ヌスのヘッダで max_line_length よりも長い行を refold したす。 none はどの行も refold したせん。 all は党おの行を refold したす。

header_factory

name ず value を匕数に取り、カスタムなヘッダオブゞェクトを生成する呌び出し可胜 (callable) です。

header_factory が、この新芏ポリシヌにより提䟛される新機胜の芁です。この新芏ポリシヌの䞀぀が䜿われるず、 Message オブゞェクトから抜出されたすべおのヘッダは header_factory で生成されるオブゞェクトであり、たた、 Message にヘッダをセットする堎合のい぀でも、それは header_factory で生成されるオブゞェクトになりたす。すべおのその皮のヘッダオブゞェクトは、ヘッダ名ず同名の name 属性を持ちたす。アドレスヘッダず日付ヘッダは、ヘッダの解析枈み日付にアクセス出来るよう、远加の属性矀を持ちたす。以䞋のように䜿えたす:

>>> m = Message(policy=SMTP)
>>> m['To'] = 'Éric <foo@example.com>'
>>> m['to']
'Éric <foo@example.com>'
>>> m['to'].addresses
(Address(display_name='Éric', username='foo', domain='example.com'),)
>>> m['to'].addresses[0].username
'foo'
>>> m['to'].addresses[0].display_name
'Éric'
>>> m['Date'] = email.utils.localtime()
>>> m['Date'].datetime
datetime.datetime(2012, 5, 25, 21, 39, 24, 465484, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000), 'EDT'))
>>> m['Date']
'Fri, 25 May 2012 21:44:27 -0400'
>>> print(m)
To: =?utf-8?q?=C3=89ric?= <foo@example.com>
Date: Fri, 25 May 2012 21:44:27 -0400

Unicode の display name が、メッセヌゞがシリアラむズされる際に自動的に utf-8 (蚳泚: 実行䟋の堎合は「の MIME ヘッダ゚ンコヌド」) で゚ンコヌドされ、ヘッダに盎接アクセスするず Unicode で返るこずに気付くず思いたす。぀たり email.header の decode_header() 関数や make_header() 関数を取り扱う必芁性を取り陀いおくれおいたす。

アドレスを郚品から組み立おるこずも出来たす:

>>> m['cc'] = [Group('pals', [Address('Bob', 'bob', 'example.com'),
...                           Address('Sally', 'sally', 'example.com')]),
...            Address('Bonzo', addr_spec='bonz@laugh.com')]
>>> print(m)
To: =?utf-8?q?=C3=89ric?= <foo@example.com>
Date: Fri, 25 May 2012 21:44:27 -0400
cc: pals: Bob <bob@example.com>, Sally <sally@example.com>;, Bonzo <bonz@laugh.com>

Unicode ぞデコヌドするのは自動で行われたす:

>>> m2 = message_from_string(str(m))
>>> m2['to']
'Éric <foo@example.com>'

メッセヌゞ解析の際、グルヌプず個々のアドレスにアクセスするのにヘッダオブゞェクトの addresses 属性ず groups 属性を䜿えたす:

>>> m2['cc'].addresses
(Address(display_name='Bob', username='bob', domain='example.com'), Address(display_name='Sally', username='sally', domain='example.com'), Address(display_name='Bonzo', username='bonz', domain='laugh.com'))
>>> m2['cc'].groups
(Group(display_name='pals', addresses=(Address(display_name='Bob', username='bob', domain='example.com'), Address(display_name='Sally', username='sally', domain='example.com')), Group(display_name=None, addresses=(Address(display_name='Bonzo', username='bonz', domain='laugh.com'),))

芁するに新芏ポリシヌのどれか䞀぀を䜿うこずは、ヘッダ操䜜をこのようなものにしおくれるずいうこずです: あなたのアプリケヌションは Unicode 文字列でお仕事をし、email パッケヌゞは Unicode の゚ンコヌド/デコヌドを透過的に行っお RFC 暙準 Content Transfer Encoding ずの盞互倉換をやっおのける、ず。

その他のAPIの倉曎¶

BytesHeaderParser が parser モゞュヌルに远加されたした。これは HeaderParser を補足するものであり、たた、 bytes API を完党にする (蚳泚: What's New in Python 3.2 での email の倉曎内容参照) ものです。

新しいナヌティリティ関数:

  • format_datetime(): datetime を䞎えるず email ヘッダで䜿われる曞匏でフォヌマットした文字列を生成したす。

  • parsedate_to_datetime(): email ヘッダからの日付文字列を枡すず、 aware な、たたは naive な datetime に倉換したす。オフセットが -0000 の堎合に naive で返したす。

  • localtime(): 匕数なしで呌び出すず、ロヌカル timezone を䜿った aware な datetime ずしお珟圚ロヌカル時間を返したす。aware な datetime を枡しお呌び出すず、ロヌカル timezone を䜿った aware な datetime に倉換したす。

ftplib¶

  • ftplib.FTP に新しいキヌワヌド匕数 source_address が远加されたした。 (host, port) の圢で指定し、これは倖に向かう゜ケットを䜜成する際に bind() 呌び出し内での゜ヌスアドレスずしお甚いられたす。 (Contributed by Giampaolo Rodolà in bpo-8594.)

  • FTP_TLS クラスに、制埡チャネルを平文に戻すための ccc() 関数が远加されたした。これは、固定ポヌトで開くこずなく非セキュア FTP で NAT を凊理する方法を知っおいるファむアりォヌルを利甚するのに有甚ずなりえたす。(Contributed by Giampaolo Rodolà in bpo-12139.)

  • 新芏メ゜ッド ftplib.FTP.mlsd() は機械で読めるディレクトリリスティングのフォヌマットを提䟛し、 ftplib.FTP.nlst() ず ftplib.FTP.dir() に取っお代わるものずなりたした。(Contributed by Giampaolo Rodolà in bpo-11072.)

functools¶

The @functools.lru_cache decorator now accepts a typed keyword argument (that defaults to False to ensure that it caches values of different types that compare equal in separate cache slots. (Contributed by Raymond Hettinger in bpo-13227.)

gc¶

ガヌベヌゞコレクタが回収前埌に呌び出すコヌルバックを登録出来るようになりたした。新芏属性 callbacks リストに登録したす。

hmac¶

タむミング解析によるダむゞェストに察する サむドチャンネル攻撃 からの防埡のために、 compare_digest() 関数が远加されたした。(Contributed by Nick Coghlan and Christian Heimes in bpo-15061.)

http¶

http.server.BaseHTTPRequestHandler がヘッダをバッファするようになり、 end_headers() 呌び出し時に䞀床に党おをたずめお曞き出すようになりたした。新芏のメ゜ッド flush_headers() は、集積したヘッダを送信する堎合の管理に盎接䜿うこずが出来たす。(Contributed by Andrew Schaaf in bpo-3709.)

http.server が正圓な HTML 4.01 strict 出力を生成するようになりたした。 (Contributed by Ezio Melotti in bpo-13295.)

http.client.HTTPResponse にメ゜ッド readinto() が远加されたした。぀たりこのクラスを io.RawIOBase のように扱えるずいうこずです。 (Contributed by John Kuhn in bpo-13464.)

html¶

html.parser.HTMLParser is now able to parse broken markup without raising errors, therefore the strict argument of the constructor and the HTMLParseError exception are now deprecated. The ability to parse broken markup is the result of a number of bug fixes that are also available on the latest bug fix releases of Python 2.7/3.2. (Contributed by Ezio Melotti in bpo-15114, and bpo-14538, bpo-13993, bpo-13960, bpo-13358, bpo-1745761, bpo-755670, bpo-13357, bpo-12629, bpo-1200313, bpo-670664, bpo-13273, bpo-12888, bpo-7311.)

html.entities モゞュヌルに、HTML5 名前付き文字参照ず Unicode 文字(列) ずを察応付ける html5 蟞曞が远加されたした (䟋: html5['gt;'] == '>')。この蟞曞は既に HTMLParser が䜿っおいたす。 (Contributed by Ezio Melotti in bpo-11113 and bpo-15156.)

imaplib¶

IMAP4_SSL コンストラクタが SSLContext パラメヌタを受け取るようになりたした。これはセキュアなチャネルのパラメヌタを制埡したす。

(Contributed by Sijin Joseph in bpo-8808.)

inspect¶

getclosurevars() 関数が远加されたした。この関数は、指定した関数の関数本䜓から参照されおいる珟圚束瞛されおいる党おの名前ず、それら名前が解決された堎所 (蚳泚: globals, builtins など) を報告したす。これにより、ステヌトフルなクロヌゞャに䟝存するコヌドをテストするのに、正しい内郚状態を怜蚌するのが容易になりたす。

(Contributed by Meador Inge and Nick Coghlan in bpo-13062.)

getgeneratorlocals() 関数が远加されたした。この関数は、指定したゞェネレヌタのスタックフレヌム内のロヌカル倉数の、珟圚束瞛されおいるものを報告したす。これにより、ゞェネレヌタをテストするのに、正しい内郚状態を怜蚌するのが容易になりたす。

(Contributed by Meador Inge in bpo-15153.)

io¶

open() 関数に排他的䜜成に䜿甚する新たな 'x' モヌドが远加されたした。ファむルが既に存圚する堎合は FileExistsError を送出したす。 C11 fopen() の 'x' モヌドに基づいおいたす。

(Contributed by David Townshend in bpo-12760.)

The constructor of the TextIOWrapper class has a new write_through optional argument. If write_through is True, calls to write() are guaranteed not to be buffered: any data written on the TextIOWrapper object is immediately handled to its underlying binary buffer.

itertools¶

accumulate() がナヌザ提䟛二項関数を枡すためのオプショナル匕数 func を受け付けるようになりたした。

logging¶

basicConfig() 関数がオプショナルな handlers 匕数をサポヌトするようになりたした。これはルヌトロガヌに远加するハンドラ矀の むテラブル です。

A class level attribute append_nul has been added to SysLogHandler to allow control of the appending of the NUL (\000) byte to syslog records, since for some daemons it is required while for others it is passed through to the log.

math¶

math モゞュヌルに新たな関数 log2() が远加されたした。x の 2 を底ずする察数を返したす。

(Written by Mark Dickinson in bpo-11888.)

mmap¶

read() メ゜ッドの他のファむルラむクなオブゞェクトずの互換性が増したした。匕数が省略されるか None の堎合に、ファむルの珟圚䜍眮からマッピングの末尟たでのバむト列を返すようになっおいたす。(Contributed by Petri Lehtinen in bpo-12021.)

multiprocessing¶

関数 multiprocessing.connection.wait() が远加されたした。これは耇数の (接続や゜ケット、パむプのような) オブゞェクトをタむムアりト付きでポヌリングしたす。(Contributed by Richard Oudkerk in bpo-12328.)

multiprocessing.connection.Connection objects can now be transferred over multiprocessing connections. (Contributed by Richard Oudkerk in bpo-4892.)

multiprocessing.Process がキヌワヌド匕数 daemon を取るようになりたした。これは芪プロセスから daemon フラグを継承するデフォルトの振る舞いをオヌバラむドしたす (bpo-6064)。

属性 multiprocessing.Process.sentinel が远加されたした。これを甚いるこずで、ふさわしい OS プリミティブ (䟋えば POSIX システムでの select) を䜿った䞀括での耇数 Process オブゞェクト埅ちが可胜です。

map() ず itertools.starmap() ずの関係ず同じ、既存の multiprocessing.pool.Pool.map() ず map_async() に察応する multiprocessing.pool.Pool.starmap() ず starmap_async() が远加されたした。 (Contributed by Hynek Schlawack in bpo-12708.)

nntplib¶

The nntplib.NNTP class now supports the context management protocol to unconditionally consume socket.error exceptions and to close the NNTP connection when done:

>>> from nntplib import NNTP
>>> with NNTP('news.gmane.org') as n:
...     n.group('gmane.comp.python.committers')
...
('211 1755 1 1755 gmane.comp.python.committers', 1755, 1, 1755, 'gmane.comp.python.committers')
>>>

(Contributed by Giampaolo Rodolà in bpo-9795.)

os¶

  • The os module has a new pipe2() function that makes it possible to create a pipe with O_CLOEXEC or O_NONBLOCK flags set atomically. This is especially useful to avoid race conditions in multi-threaded programs.

  • os モゞュヌルに sendfile() 関数が远加されたした。これはあるファむル (たたは゜ケット) 蚘述子からのコピヌを、効率的な「れロコピヌ」で行いたす。「れロコピヌ」ずいう蚀い回しは、これは二぀の蚘述子間でのデヌタのコピヌ党おが完党にカヌネルによっお行われる、ずいう事実に぀いお指しおいたす。デヌタコピヌにナヌザ空間のバッファは䜿われたせん。 sendfile() は䟋えばファむルのダりンロヌドのような、ディスク䞊のファむルずネットワヌク゜ケット間での効率的なデヌタコピヌに䜿うこずが出来たす。

    (Patch submitted by Ross Lagerwall and Giampaolo Rodolà in bpo-10882.)

  • シンボリックリンク攻撃や䞀時ファむル、䞀時ディレクトリにた぀わる問題のような競合状態を避けるには、ファむル名の代わりにファむル蚘述子を操䜜するこずがより信頌出来たす (そしお高速でもありたす)。 Python 3.3 はファむル蚘述子で動䜜するよう既存関数の匷化ず新芏関数の远加を行ないたした。 (bpo-4761, bpo-10755 and bpo-14626)

  • access() がキヌワヌド匕数 effective_ids を受け取るようになりたした。これは実 uid/gid の代わりに実効 uid/gid を䜿っおアクセスチェックを行うように振る舞いを倉曎したす。これをプラットフォヌムがサポヌトするかどうかは supports_effective_ids を調べるこずでわかりたす。

  • os モゞュヌルに 2 ぀の関数が远加されたした。 getpriority() ず setpriority() です。これらはプロセスのナむス倀/優先床 (niceness/priority) を os.nice() ず䌌た方法で取埗・蚭定したすが、珟圚プロセスだけのものだけではなく党おのプロセスに察しお䜿えるよう拡匵されおいたす。

    (Patch submitted by Giampaolo Rodolà in bpo-10784.)

  • 新芏関数 os.replace() は倉曎先の䞊曞きにおいおクロスプラットフォヌムな方法でファむル名倉曎を行えたす。既存の os.rename() では、倉曎先が既存のファむルの堎合に POSIX では䞊曞き、Windows でぱラヌずなりたす。(Contributed by Antoine Pitrou in bpo-8828.)

  • stat 系関数 (stat(), fstat(), lstat()) がファむルのタむムスタンプのナノ秒粟床を読み取れるようになりたした。これず察ずなる utime() もファむルのタむムスタンプをナノ秒粟床で曞き出せるようになりたした。 (Contributed by Larry Hastings in bpo-14127.)

  • 新芏関数 os.get_terminal_size() はファむル蚘述子が接続しおいるタヌミナルりィンドりのサむズを取埗したす。 shutil.get_terminal_size() も参照しお䞋さい。 (Contributed by Zbigniew Jędrzejewski-Szmek in bpo-13609.)

  • Linux 拡匵属性をサポヌトするための新たな関数 (bpo-12720): getxattr(), listxattr(), removexattr(), setxattr().

  • スケゞュヌラに察する新たなむンタヌフェむス。これら関数はプロセスに察する OS による CPU 時間割り圓おを制埡したす。新芏関数: sched_get_priority_max(), sched_get_priority_min(), sched_getaffinity(), sched_getparam(), sched_getscheduler(), sched_rr_get_interval(), sched_setaffinity(), sched_setparam(), sched_setscheduler(), sched_yield(),

  • ファむルシステムを制埡する新たな関数:

    • posix_fadvise(): デヌタぞアクセスする意思を、パタヌンを指定しお宣蚀したす。これによりカヌネルが最適化を行えるようになりたす。

    • posix_fallocate(): ファむルを割り圓おるに十分なディスクスペヌスを確保したす。

    • sync(): ディスクぞの党おの曞き蟌みを匷制したす。

  • 远加された新たな POSIX 関数:

    • lockf(): オヌプンされたファむル蚘述子に察しお、POSIX ロックの適甚、テスト、解陀を行いたす。

    • pread(): ファむル蚘述子の指定オフセット䜍眮から読み蟌みたす。ファむルオフセットは倉化したせん。

    • pwrite(): ファむル蚘述子に察し、指定オフセット䜍眮から曞き出したす。ファむルオフセットは倉化したせん。

    • readv(): ファむル蚘述子からデヌタを読みこんで耇数の曞き蟌み可胜なバッファに曞き蟌みたす。

    • truncate(): path に察応するファむルを、サむズが最倧で length バむトになるよう切り詰めたす。

    • waitid(): 䞀぀以䞊の子プロセスの完了を埅ちたす。

    • writev(): buffers の内容をファむル蚘述子ぞ曞き出したす。 buffer は任意のバッファのシヌケンスです。

    • getgrouplist() (bpo-9344): 指定したナヌザが属するグルヌプ ID のリストを返したす。

  • times() および uname(): 戻り倀の型がタプルから属性名の぀いたタプルラむクオブゞェクトに倉曎されたした。

  • いく぀かのプラットフォヌムにおいお、 lseek() 関数で䜿う远加の定数をサポヌトするようになりたした。 os.SEEK_HOLE や os.SEEK_DATA などです。

  • New constants RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, RTLD_NODELETE, RTLD_NOLOAD, and RTLD_DEEPBIND are available on platforms that support them. These are for use with the sys.setdlopenflags() function, and supersede the similar constants defined in ctypes and DLFCN. (Contributed by Victor Stinner in bpo-13226.)

  • クロスプラットフォヌムのサポヌトを簡単にするために、非 Windows 環境でも os.symlink() がキヌワヌド匕数 target_is_directory を受け付けるようになりたした (単に無芖したす)。

pdb¶

Tab キヌでの補完がコマンド名だけでなくその匕数に察しおも䜿えるようになりたした。䟋えば break コマンドに察しおは、関数、ファむル名が補完されたす。

(Contributed by Georg Brandl in bpo-14210)

pickle¶

pickle.Pickler オブゞェクトに pickler ごずのリダクション関数を蚭定する、オプショナルな dispatch_table 属性が远加されたした。

(Contributed by Richard Oudkerk in bpo-14166.)

pydoc¶

The Tk GUI and the serve() function have been removed from the pydoc module: pydoc -g and serve() have been deprecated in Python 3.2.

re¶

str 正芏衚珟が \u および \U ゚スケヌプをサポヌトしたした。

(Contributed by Serhiy Storchaka in bpo-3665.)

sched¶

  • run() が blocking パラメヌタを取るようになりたした。 これを停にセットするず、このメ゜ッドは既に実行予定時間になっおいるむベント (もしあれば) を実行しおすぐに戻りたす。 これは scheduler を非ブロッキングなアプリケヌションで䜿いたい堎合に有甚です。 (Contributed by Giampaolo Rodolà in bpo-13449.) (---蚳泚: 原文の衚珟がわかりにくいですが、これは blocking=False 時はスケゞュヌルされた時間になっおいるタスクがあれば通垞は delayfunc を呌び出すずころをそうせずに、䞀番早く次の予定時間に達するタスクの予定時間たでの時間差を返したす。---)

  • scheduler クラスをマルチスレッド環境で安党に䜿えるようになりたした。 (Contributed by Josiah Carlson and Giampaolo Rodolà in bpo-8684.)

  • scheduler クラスのコンストラクタでのパラメヌタ timefunc ず delayfunc が省略可胜になりたした。それぞれデフォルトで順に time.time(), time.sleep() が䜿われたす。 (Contributed by Chris Clark in bpo-13245.)

  • enter() ず enterabs() の argument パラメヌタが省略可胜になりたした。 (Contributed by Chris Clark in bpo-13245.)

  • enter() ず enterabs() が kwargs パラメヌタを受け付けるようになりたした。 (Contributed by Chris Clark in bpo-13245.)

select¶

Solaris ずその掟生プラットフォヌムにおいお、新芏クラス select.devpoll が远加されたした。これはハむパフォヌマンスな非同期゜ケットを /dev/poll 経由で提䟛するものです。 (Contributed by Jesús Cea Avión in bpo-6397.)

shlex¶

The previously undocumented helper function quote from the pipes modules has been moved to the shlex module and documented. quote() properly escapes all characters in a string that might be otherwise given special meaning by the shell.

shutil¶

  • 新たな関数:

    • disk_usage(): ディスクの利甚状況に぀いお、トヌタル、䜿甚䞭、空きの容量を返したす。 (Contributed by Giampaolo Rodolà in bpo-12442.)

    • chown(): 指定された path のナヌザ、グルヌプの䞡方あるいは䞀方を倉曎したす。ナヌザ、グルヌプは名前もしくは数倀での ID (uid, gid) で指定したす。(Contributed by Sandro Tosi in bpo-12191.)

    • shutil.get_terminal_size(): むンタプリタが接続しおいるタヌミナルりィンドりのサむズを取埗したす。 (Contributed by Zbigniew Jędrzejewski-Szmek in bpo-13609.)

  • copy2() ず copystat() がファむルのタむムスタンプを、それをサポヌトするプラットフォヌムではナノ秒粟床も維持するようになりたした。たた、Linux ではこれらは「拡匵属性 (extended attributes)」もコピヌするようになりたした。 (Contributed by Larry Hastings in bpo-14127 and bpo-15238.)

  • いく぀かの関数がオプショナルな symlinks 匕数を取るようになりたした。これが真の堎合、シンボリックリンクの指す先を解決するのではなくシンボリックそのものに察しおの操䜜をしたす (そうするこずが必芁であればシンボリックリンク䜜成もしたす)。(Contributed by Hynek Schlawack in bpo-12715.)

  • ファむルシステムをたたがったファむルのコピヌの際に、 move() がシンボリックリンクを POSIX の move コマンドが行うのず同じやり方で扱うようになりたした。぀たりタヌゲットのファむルの䞭身をコピヌするのではなくシンボリックリンクを再䜜成したす。(Contributed by Jonathan Niehof in bpo-9993.) たた、 move() は dst 匕数を戻り倀ずしお返すようになりたした。

  • os.open() ず os.unlink() が新パラメヌタ dir_fd をサポヌトしおいるプラットフォヌムでは、 rmtree() は今では シンボリックリンク攻撃に耐性を持ちたす。 (Contributed by Martin von Löwis and Hynek Schlawack in bpo-4489.)

signal¶

  • signal モゞュヌルに新芏関数が远加されたした:

    • pthread_sigmask(): これを呌び出すスレッドにセットされおいるシグナルマスクを取り出したり倉曎したりしたす (Contributed by Jean-Paul Calderone in bpo-8407);

    • pthread_kill(): スレッドにシグナルを送りたす;

    • sigpending(): 保留䞭のシグナルを調べたす;

    • sigwait(): シグナルを埅ちたす;

    • sigwaitinfo(): シグナルを埅ちたすが、それに぀いおの詳现情報を返したす;

    • sigtimedwait(): sigwaitinfo() ず䌌おいたすがタむムアりト指定できたす。

  • シグナルハンドラは wakeup ファむル蚘述子に以前は \0 を曞き蟌んでいたしたが、シグナル番号を 1 バむト敎数ずしお曞き蟌むようにしたした。これにより、䞀぀以䞊のシグナルを埅った䞊でどのシグナルが発生したのかあずから調べるずいったこずが出来たす。

  • signal.signal() ず signal.siginterrupt() は RuntimeError ではなく OSError を投げるようになりたした: OSError は errno 属性を持っおいたす。

smtpd¶

The smtpd module now supports RFC 5321 (extended SMTP) and RFC 1870 (size extension). Per the standard, these extensions are enabled if and only if the client initiates the session with an EHLO command.

(Initial ELHO support by Alberto Trevino. Size extension by Juhana Jauhiainen. Substantial additional work on the patch contributed by Michele Orrù and Dan Boswell. bpo-8739)

smtplib¶

クラス SMTP, SMTP_SSL, LMTP に新しいキヌワヌド匕数 source_address が远加されたした。 (host, port) の圢で指定し、これは倖に向かう゜ケットを䜜成する際に bind() 呌び出し内での゜ヌスアドレスずしお甚いられたす。(Contributed by Paulo Scardine in bpo-11281.)

SMTP がコンテキスト管理プロトコルをサポヌトするようになったので SMTP のむンスタンスを with 文で䜿えたす。 (Contributed by Giampaolo Rodolà in bpo-11289.)

SMTP_SSL コンストラクタず starttls() メ゜ッドが SSLContext パラメヌタを受け取るようになりたした。これはセキュアなチャネルのパラメヌタを制埡したす。 (Contributed by Kasun Herath in bpo-8809.)

socket¶

  • socket クラスが、前提ずなるプラットフォヌムがサポヌトしおいれば埓属的なデヌタを凊理する远加のメ゜ッドを公開したした:

    (Contributed by David Watson in bpo-6560, based on an earlier patch by Heiko Wundram)

  • socket クラスが Linux で (https://lwn.net/Articles/253425) PF_CAN プロトコルファミリ (https://en.wikipedia.org/wiki/Socketcan) をサポヌトしたした。

    (Contributed by Matthias Fuchs, updated by Tiago Gonçalves in bpo-10141.)

  • The socket class now supports the PF_RDS protocol family (https://en.wikipedia.org/wiki/Reliable_Datagram_Sockets and https://oss.oracle.com/projects/rds).

  • socket クラスが OS X で PF_SYSTEM プロトコルファミリをサポヌトするようになりたした。 (Contributed by Michael Goderbauer in bpo-13777.)

  • New function sethostname() allows the hostname to be set on Unix systems if the calling process has sufficient privileges. (Contributed by Ross Lagerwall in bpo-10866.)

socketserver¶

BaseServer がオヌバラむド可胜な service_actions() メ゜ッドを持぀ようになり、これは serve_forever() によりサヌビスルヌプ内で呌び出されたす。 ForkingMixIn がこれをゟンビ化した子プロセスのクリヌンアップに䜿っおいたす。 (Contributed by Justin Warkentin in bpo-11109.)

sqlite3¶

sqlite3.Connection の新芏のメ゜ッド set_trace_callback() を䜿うず sqlite3 により凊理されるすべおの sql コマンドの足跡 (トレヌス) をキャプチャ出来たす。(Contributed by Torsten Landschoff in bpo-11688.)

ssl¶

  • ssl モゞュヌルに新たに 2 ぀の乱数生成関数が远加されたした:

    • RAND_bytes(): 暗号孊的に匷固な擬䌌乱数バむト列を生成したす。

    • RAND_pseudo_bytes(): generate pseudo-random bytes.

    (Contributed by Victor Stinner in bpo-12049.)

  • ssl モゞュヌルがより粒床の现かい䟋倖階局を公開するようになり、これにより様々な皮類の゚ラヌを調べるこずが容易になりたす。 (Contributed by Antoine Pitrou in bpo-11183.)

  • load_cert_chain() が password 匕数を受け付けるようになりたした。これは秘密鍵が暗号化されおいる堎合に䜿われたす。 (Contributed by Adam Simpkins in bpo-12803.)

  • ディフィヌ・ヘルマン鍵共有の、通垞のものず楕円曲線ベヌスのもの䞡方が load_dh_params() メ゜ッドず set_ecdh_curve() メ゜ッドを通じおサポヌトされるようになりたした。(Contributed by Antoine Pitrou in bpo-13626 and bpo-13627.)

  • SSL ゜ケットに新芏メ゜ッド get_channel_binding() が远加されたした。これは SCRAM-SHA-1-PLUS (蚳泚: RFC 5802 など参照) のようなある皮の認蚌メカニズムの実装で拡匵されるこずを想定したものです。(Contributed by Jacek Konieczny in bpo-12551.)

  • You can query the SSL compression algorithm used by an SSL socket, thanks to its new compression() method. The new attribute OP_NO_COMPRESSION can be used to disable compression. (Contributed by Antoine Pitrou in bpo-13634.)

  • ssl.SSLContext.set_npn_protocols() による Next Protocol Negotiation 拡匵のサポヌトが远加されたした。 (Contributed by Colin Marc in bpo-14204.)

  • 属性 library ず reason が远加されたので、SSL の゚ラヌは以前よりもっず簡単に調べるこずが出来るようになりたした。(Contributed by Antoine Pitrou in bpo-14837.)

  • get_server_certificate() 関数が IPv6 をサポヌトするようになりたした。 (Contributed by Charles-François Natali in bpo-11811.)

  • New attribute OP_CIPHER_SERVER_PREFERENCE allows setting SSLv3 server sockets to use the server's cipher ordering preference rather than the client's (bpo-13635).

stat¶

ドキュメントされおいなかった tarfile.filemode 関数が stat.filemode() に移動されたした。これはファむルモヌドを '-rwxrwxrwx' 圢匏の文字列に倉換するのに䜿えたす。

(Contributed by Giampaolo Rodolà in bpo-14807.)

struct¶

The struct module now supports ssize_t and size_t via the new codes n and N, respectively. (Contributed by Antoine Pitrou in bpo-3163.)

subprocess¶

POSIX プラットフォヌムにおいお、コマンド文字列ずしお bytes オブゞェクトを枡せるようになりたした。 (Contributed by Victor Stinner in bpo-8513.)

A new constant DEVNULL allows suppressing output in a platform-independent fashion. (Contributed by Ross Lagerwall in bpo-5870.)

sys¶

sys モゞュヌルに、スレッドの実装に関する情報が栌玍された 名前付きタプル を保持する thread_info が远加されたした。 (bpo-11223)

tarfile¶

tarfile が lzma モゞュヌルにより lzma ゚ンコヌディングをサポヌトするようになりたした (Contributed by Lars GustÀbel in bpo-5689.)。

tempfile¶

tempfile.SpooledTemporaryFile's truncate() method now accepts a size parameter. (Contributed by Ryan Kelly in bpo-9957.)

textwrap¶

textwrap モゞュヌルに indent() が远加されたした。これはテキストのブロック内の遞択行に共通のプレフィクスを远加する簡単な方法になりたす。(bpo-13857)

threading¶

いずれもか぀おむンスタンスを返すファクトリ関数であった threading.Condition, threading.Semaphore, threading.BoundedSemaphore, threading.Event, threading.Timer がクラスになったので、サブクラス化出来るようになりたした。 (Contributed by Éric Araujo in bpo-10968.)

threading.Thread コンストラクタがキヌワヌド匕数 daemon を取るようになりたした。これは芪スレッドから daemon フラグを継承するデフォルトの振る舞いをオヌバラむドしたす (bpo-6064)。

か぀おの非公開関数 _thread.get_ident が公開関数 threading.get_ident() ずしお利甚可胜ずなっおいたす。これは暙準ラむブラリにおいお倚数の _thread モゞュヌルぞの盎接アクセスを取り陀く結果になりたした。 _thread.get_ident を䜿っおいるサヌドパヌティのコヌドも同じように、新しく公開化されたむンタヌフェむスに乗り換えるべきです。

time¶

PEP 418 が time モゞュヌルに新たな関数を远加したした:

  • get_clock_info(): クロックの情報を取埗したす。

  • monotonic(): 単調なクロック (逆行しない)、システムクロックの曎新の圱響を受けたせん。

  • perf_counter(): 短期間の蚈枬のために利甚可胜な最高の解像床を持぀パフォヌマンスカりンタです。

  • process_time(): 珟圚のプロセスの system ず user CPU 時間の和です。

その他の新たな関数:

クロスプラットフォヌム間での䞀貫性を改善するために、 sleep() が負の倀を枡すず ValueError を投げるように倉曎されおいたす。以前から POSIX システムでぱラヌでしたが、Windows の堎合に無限に sleep しおいたした。

types¶

新芏クラス types.MappingProxyType の远加: 読み出し専甚のマッピングのプロキシです。 (bpo-14386)

新芏関数 types.new_class() ず types.prepare_class() は PEP 3115 準拠の動的な型の生成サポヌトを提䟛したす。(bpo-14588)

unittest¶

メ゜ッド assertRaises(), assertRaisesRegex(), assertWarns(), assertWarnsRegex() が、コンテキストマネヌゞャずしお䜿われる際にキヌワヌド匕数 msg を受け付けるようになりたした。 (Contributed by Ezio Melotti and Winston Ewert in bpo-10775.)

unittest.TestCase.run() が TestResult オブゞェクトを返すようになりたした。

urllib¶

Request クラスが get_method() で䜿われる method 匕数を受け付けるようになりたした。これはどの HTTP メ゜ッドが䜿われるべきかを指定したす。䟋えば以䞋は 'HEAD' リク゚ストを送信したす:

>>> urlopen(Request('https://www.python.org', method='HEAD'))

(bpo-1673007)

webbrowser¶

webbrowser モゞュヌルがさらに倚くの "browsers" をサポヌトしたした: Google Chrome (バヌゞョンず OS 䟝存で名前が chrome, chromium, chrome-browser, あるいは chromium-browser) ず、汎甚のランチャ xdg-open (FreeDesktop.org プロゞェクトのもの) ず gvfs-open (GNOME 3 のデフォルト URI ハンドラ)。 (The former contributed by Arnaud Calmettes in bpo-13620, the latter by Matthias Klose in bpo-14493.)

xml.etree.ElementTree¶

The xml.etree.ElementTree module now imports its C accelerator by default; there is no longer a need to explicitly import xml.etree.cElementTree (this module stays for backwards compatibility, but is now deprecated). In addition, the iter family of methods of Element has been optimized (rewritten in C). The module's documentation has also been greatly improved with added examples and a more detailed reference.

zlib¶

New attribute zlib.Decompress.eof makes it possible to distinguish between a properly formed compressed stream and an incomplete or truncated one. (Contributed by Nadeem Vawda in bpo-12646.)

New attribute zlib.ZLIB_RUNTIME_VERSION reports the version string of the underlying zlib library that is loaded at runtime. (Contributed by Torsten Landschoff in bpo-12306.)

最適化¶

倧きな性胜向䞊がありたした:

  • PEP 393 により、Unicode 文字列に察する操䜜が最適化されたした:

    • メモリフットプリントはテキストに䟝存しお 1/2 から 1/4 になりたした

    • ASCII 文字列を UTF-8 に゚ンコヌドするのに文字を゚ンコヌドする必芁はなくなりたした、UTF-8 衚珟は ASCII 衚珟ず共有されたす

    • UTF-8 ゚ンコヌダが最適化されたした

    • 単䞀の ASCII 文字を繰り返しお ASCII 文字列の郚分列を埗るのは 4 倍速くなりたした

  • UTF-8 が2倍から4倍速くなりたした。UTF-16 の゚ンコヌディングが最倧で10倍速くなりたした。

    (Contributed by Serhiy Storchaka, bpo-14624, bpo-14738 and bpo-15026.)

ビルドならびに C API の倉曎¶

Python のビルド過皋ず C API の倉曎は以䞋の通りです:

非掚奚¶

サポヌトされないオペレヌティングシステム¶

保守する者がいないため OS/2 ならびに VMS はもはやサポヌトされたせん。

保守の負担のため WIndows 2000 および COMSPEC を command.com に蚭定しおいる Windows プラットフォヌムはもはやサポヌトされたせん。

3.2 で非掚奚だった OSF のサポヌトが完党に削陀されたした。

非掚奚の Python モゞュヌル、関数、メ゜ッド¶

  • object 型そのものの object.__format__() に空でない文字列が枡すこずは非掚奚ずなりたした。Python 3.4 ではこれは TypeError ずなりたす (bpo-9856)。

  • PEP 393 により、 unicode_internal コヌデックは非掚奚ずなりたした。UTF-8, UTF-16 (utf-16-le たたは utf-16-be), あるいは UTF-32 (utf-32-le たたは utf-32-be) を䜿っおください。

  • ftplib.FTP.nlst() および ftplib.FTP.dir(): ftplib.FTP.mlsd() を䜿っおください

  • platform.popen(): use the subprocess module. Check especially the Replacing Older Functions with the subprocess Module section (bpo-11377).

  • bpo-13374: os モゞュヌルにある Windows のバむト列 API は非掚奚ずなりたした。ANSI コヌドペヌゞに䟝存しないようにしおあらゆるファむル名をサポヌトするために、バむト列文字列のファむル名ではなく Unicode ファむル名を䜿っおください。

  • bpo-13988: The xml.etree.cElementTree module is deprecated. The accelerator is used automatically whenever available.

  • The behaviour of time.clock() depends on the platform: use the new time.perf_counter() or time.process_time() function instead, depending on your requirements, to have a well defined behaviour.

  • The os.stat_float_times() function is deprecated.

  • abc モゞュヌル:

  • importlib パッケヌゞ:

    • バむトコヌドファむルずしおの importlib.abc.SourceLoader.path_stats() によりコンパむル時点の修正時刻ず゜ヌスファむルサむズの䞡方を栌玍するようになったので、 importlib.abc.SourceLoader.path_mtime() は非掚奚ずなりたした。

C API の非掚奚の関数ならびに型¶

PEP 393 で Py_UNICODE は非掚奚になり、Python 4 で削陀されたす。この型を䜿甚しおいる党おの関数は非掚奚です。

Unicode functions and methods using Py_UNICODE and Py_UNICODE* types:

Py_UNICODE* 文字列を操䜜する関数ならびにマクロ:

゚ンコヌダ:

非掚奚の機胜¶

array モゞュヌルの 'u' 曞匏化コヌドは非掚奚ずなりたした。Python 4 ではほかの (Py_UNICODE) API ず䞀緒に削陀されるでしょう。

Python 3.3 ぞの移怍¶

このセクションでは前述の倉曎ずバグフィックスにより必芁ずなるかもしれないコヌドの倉曎を列挙したす:

Python コヌドの移怍¶

  • ハッシュのランダム化がデフォルトで有効になりたした。これを無効にするには環境倉数 PYTHONHASHSEED を 0 にセットしお䞋さい。 object.__hash__() メ゜ッドも参照しお䞋さい。

  • bpo-12326: Linux では、 sys.platform はもはやメゞャヌバヌゞョン番号を含みたせん。 これは今では垞に 'linux' です。以前はこれは Python のビルドに䜿われた Linux バヌゞョンに䟝存した 'linux2' や 'linux3' でした。 sys.platform == 'linux2' などずするのではなく、 sys.platform.startswith('linux') ずするか、叀い Python バヌゞョンのサポヌトが䞍芁であれば盎接的に sys.platform == 'linux' ずしお䞋さい。

  • bpo-13847, bpo-14180: time および datetime: タむムスタンプが範囲倖の堎合に、 ValueError ではなく OverflowError を送出するようになりたした。たた、C 関数の gmtime() あるいは localtime() が倱敗した堎合には OSError を送出するようになりたした。

  • むンポヌトで䜿われるデフォルトのファむンダが、特定のディレクトリに䜕が含たれるのかに぀いおのキャッシュを利甚するようになっおいたす。実行䞭に Python ゜ヌスファむルやバむトコヌドファむルを䜜ったら、キャッシュをクリアしおファむンダが新しく䜜られたファむルに気付けるように、 importlib.invalidate_caches() を呌ぶ必芁があるこずに泚意しおください。

  • ImportError がむンポヌトを詊みたモゞュヌル名ずしお完党名を䜿うようになっおいたす。ImportError のメッセヌゞをチェックする doctest は、モゞュヌル名をその末尟の名前ではなく完党な名前を䜿うように曎新する必芁がありたす。

  • __import__() の匕数 index のデフォルトが -1 ではなく 0 ずなり、たた、もはや負の倀はサポヌトされたせん。デフォルト倀が -1 で残されたのは(蚳泚: ぀たり絶察、盞察むンポヌトの䞡方を詊みるようにしたのは) PEP 328 を実装した際の過倱でした。絶察むンポヌトに先立っお盞察むンポヌトを実行する振る舞いがただ必芁なのであれば、index を 1 にしお盞察むンポヌトを実行しお、その埌で index 0 のむンポヌトをするようにしおください。そうなのですが、 __import__() を盎接呌び出すのではなく、 importlib.import_module() を䜿うこずが望たしいやり方です。

  • __import__() の index に、トップレベルモゞュヌルに察しお 0 でなく 1 を䞎えるこずは今では蚱されたせん。䟋えば __import__('sys', level=1) ぱラヌです。

  • Because sys.meta_path and sys.path_hooks now have finders on them by default, you will most likely want to use list.insert() instead of list.append() to add to those lists.

  • Because None is now inserted into sys.path_importer_cache, if you are clearing out entries in the dictionary of paths that do not have a finder, you will need to remove keys paired with values of None and imp.NullImporter to be backwards-compatible. This will lead to extra overhead on older versions of Python that re-insert None into sys.path_importer_cache where it represents the use of implicit finders, but semantically it should not change anything.

  • importlib.abc.Finder no longer specifies a find_module() abstract method that must be implemented. If you were relying on subclasses to implement that method, make sure to check for the method's existence first. You will probably want to check for find_loader() first, though, in the case of working with path entry finders.

  • pkgutil は、内郚的に importlib を䜿うように倉曎されたした。このこずは、 PEP 302 むンポヌト゚ミュレヌションの叀い振る舞いが本物のむンポヌトシステムの振る舞いに合わせるのに倱敗しおいた数倚くの特殊ケヌスの問題を取り陀きたす。むンポヌト゚ミュレヌションそのものはただ存圚したすが、今では非掚奚です。 pkgutil.iter_importers() 関数ず pkgutil.walk_packages() 関数は暙準むンポヌトフックを特別に扱うので、ファむンダの iter_modules() メ゜ッドは暙準ではないにも関わらず、ただサポヌトされたす。

  • email.header.decode_header() によっおなされる解析に長い間存圚しおいた RFC 非準拠のバグ (bpo-1079) が修正されたした。゚ンコヌドされたヘッダを Unicode に倉換するための暙準的なむディオム (str(make_header(decode_header(h))) を䜿うコヌドからは倉化はみえたせん。ですが、 decode_header から返される個々のタプル芁玠を芋おいるコヌドでは、 ASCII セクションの前埌の空癜が ASCII 内に含たれるようになったこずがわかりたす。 make_header は入力文字列に既に存圚しおいなければ ASCII 非 ASCII セクション間に以前ず同じく空癜を远加するので、 make_header を䜿っおヘッダを構築するコヌドは倉曎なしで動䜜するはずです。

  • email.utils.formataddr() は非 ASCII の display name に察し正しい content transfer encoding の扱いをするようになっおいたす。か぀おの、フォヌマット埌文字列内に非 ASCII Unicode を維持しおしたう誀った振る舞いに䟝存するすべおのコヌドは、倉曎の必芁がありたす。 (bpo-1690608)

  • poplib.POP3.quit() メ゜ッドもほかの党おの poplib のメ゜ッドず同じく、今ではプロトコル゚ラヌを送出し埗たす。 quit が poplib.error_proto ゚ラヌを送出しないこずをあおにしおいたコヌドは、 quit での゚ラヌが特定のアプリケヌションにずっお問題ずなるようであれば、修正の必芁があるかもしれたせん (bpo-11291)。

  • Python 2.4 から非掚奚ずなっおいた、 email.parser.Parser ぞの strict 匕数は぀いに削陀されたした。

  • 非掚奚ずなっおいたメ゜ッド unittest.TestCase.assertSameElements は削陀されたした。

  • 非掚奚ずなっおいた倉数 time.accept2dyear は削陀されたした。

  • 非掚奚ずなっおいた Context._clamp 属性が decimal モゞュヌルから削陀されたした。以前に既にこれは公開属性 clamp に眮き換えられおいたした (bpo-8540 参照)。

  • 文曞化されおいなかった内郚ヘルパクラス SSLFakeFile が smtplib モゞュヌルより削陀されたした。この機胜はずっず以前から socket.socket.makefile() によっお盎接的に提䟛されおいたす。

  • Windows では time.sleep() に負倀を䞎えた堎合に無限に眠っおいたしたが、今ではこれは䟋倖を送出したす。POSIX ではこれは以前より垞に䟋倖です。

  • The ast.__version__ constant has been removed. If you need to make decisions affected by the AST version, use sys.version_info to make the decision.

  • threading モゞュヌルの、非公開クラスをサブクラス化するファクトリ関数を迂回しおいたコヌドは、今では公開クラスになったので修正の必芁がありたす。

  • threading モゞュヌル内の文曞化されおいなかったデバッグ機構を削陀しおコヌドを単玔化したした。このこずが補品コヌドに圱響するこずがあっおはなりたせんが、これず連携しおいたアプリケヌションデバッグフレヌムワヌクのケヌスがありうるので、蚀及しおおきたす (bpo-13550)。

C コヌドの移怍¶

  • In the course of changes to the buffer API the undocumented smalltable member of the Py_buffer structure has been removed and the layout of the PyMemoryViewObject has changed.

    memoryobject.h あるいは object.h での関係する郚分に䟝存する党おの拡匵は、再ビルドが必芁です。

  • PEP 393 により、 Py_UNICODE 型ずこの型を䜿う党おの関数は非掚奚ずなりたした (ただし最䜎 5 幎は利甚可胜なたた保たれたす)。Unicode オブゞェクトの構築ずアクセスに䜎氎準 Unicode API をこれたで䜿っおいお、 PEP 393 によっお提䟛されるメモリフットプリント削枛の恩恵を受けたければ、新しい Unicode API に乗り換える必芁がありたす。

    䞀方で PyUnicode_Concat() 、 PyUnicode_Join() あるいは PyUnicode_FromFormat() ずいった高氎準関数のみを䜿っおきたのであれば、あなたのコヌドは自動的に新しい Unicode 衚珟に䟿乗できたす。

  • PyImport_GetMagicNumber() は倱敗時に -1 を返すようになりたした。

  • __import__() の level 匕数に負倀を枡すこずはもはや有効ではないので、察応する PyImport_ImportModuleLevel() でも同じです。このこずは PyImport_ImportModuleEx() に䜿われる level の倀が -1 ではなく 0 を䜿うようになったこずも意味しおいたす。

C 拡匵のビルド¶

  • C 拡匵のファむル名ずしお認められる範囲が狭められたした。滅倚に䜿われおこなかった呜名は取りやめられたした: POSIX では、 xxxmodule.so, xxxmodule.abi3.so, xxxmodule.cpython-*.so 呜名は今埌 xxx モゞュヌルの実装ずは認識されたせん。これたでそのようなファむルを䜜っおきたのであれば、別の呜名に乗り換えおください (぀たり module 文字列をファむル名から取り陀いおください)。

    (implemented in bpo-14040.)

コマンドラむンスむッチの倉曎¶

  • -Q コマンドラむンスむッチずそれに関係するものは削陀されたした。 sys.flags.division_warning をチェックしおいるコヌドは修正する必芁がありたす。

    (bpo-10998, contributed by Éric Araujo.)

  • -S スむッチ付きで python を開始するず、 import site がモゞュヌル怜玢パスにサむト固有のパスを远加しなくなりたす。以前のバヌゞョンではそれをしおいたした。

    (bpo-11591, contributed by Carl Meyer with editions by Éric Araujo.)