Python 3.4の新機能—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/whatsnew/3.4
移動先:案内検索

Python3.4の新機能

著者
  1. デビッドマレー< [email protected] >(編集者)

この記事では、3.3と比較したPython3.4の新機能について説明します。 Python3.4は2014年3月16日にリリースされました。 詳細については、 changelog を参照してください。

も参照してください

PEP 429 – Python3.4リリーススケジュール


概要–リリースのハイライト

新しい構文機能:

  • Python3.4では新しい構文機能は追加されていません。

その他の新機能:

新しいライブラリモジュール:

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

セキュリティの改善:

CPython実装の改善:

他の多くの小さな改善、CPythonの最適化、非推奨、潜在的な移植の問題など、ユーザー向けの変更の包括的なリストをお読みください。


新機能

PEP 453:PythonインストールでのPIPの明示的なブートストラップ

デフォルトでのブートストラップピップ

新しい ensurepip モジュール( PEP 453 で定義)は、pipインストーラーをPythonインストールおよび仮想環境にブートストラップするための標準のクロスプラットフォームメカニズムを提供します。 Python3.4.0に含まれているpipのバージョンはpip 1.5.4であり、将来の3.4.xメンテナンスリリースでは、バンドルされているバージョンがpipの最新バージョンに更新されます。リリース候補の作成時に利用可能です。

デフォルトでは、コマンドpipXおよびpipX.Yは、pip Pythonパッケージとその依存関係。 Windowsおよびすべてのプラットフォームの仮想環境では、バージョン管理されていないpipコマンドもインストールされます。 他のプラットフォームでは、システム全体のバージョン管理されていないpipコマンドは、通常、個別にインストールされたPython2バージョンを参照します。

pyvenvコマンドラインユーティリティと venv モジュールは、 ensurepip モジュールを利用して、pipを仮想環境ですぐに利用できるようにします。 コマンドラインユーティリティを使用する場合、デフォルトでpipがインストールされますが、 venv モジュールを使用する場合は API のインストールを明示的に要求する必要があります。

CPython ソースビルドがPOSIXシステムの場合、make installおよびmake altinstallコマンドはデフォルトでpipをブートストラップします。 この動作は、configureオプションを介して制御し、Makefileオプションを介してオーバーライドできます。

WindowsおよびMacOS Xでは、CPythonインストーラーはデフォルトでpipをCPython自体と一緒にインストールするようになりました(ユーザーはインストールプロセス中にインストールをオプトアウトできます)。 ウィンドウユーザーは、自動PATH変更をオプトインして、デフォルトでコマンドラインからpipを使用できるようにする必要があります。そうしないと、Windows用のPythonランチャーから [としてアクセスできます。 X218X]。

PEP で説明されているように、プラットフォームパッケージャーは、呼び出されたときに、そのプラットフォームにコマンドをインストールする方法(通常はシステムを使用)について明確で簡単な指示を提供する限り、デフォルトでこれらのコマンドをインストールしないことを選択できます。パッケージマネージャー)。

ノート

Python2とPython3の並列インストール間の競合を回避するために、ensurepipが直接呼び出された場合、デフォルトではバージョン管理されたpip3およびpip3.4コマンドのみがブートストラップされます- [X198X ]オプションは、バージョン管理されていないpipコマンドも要求するために必要です。 pyvenvとWindowsインストーラーは、修飾されていないpipコマンドがこれらの環境で使用できるようにし、pipは常に-mスイッチを介して呼び出すことができます。複数のPythonがインストールされているシステムでのあいまいさを回避するために直接。


ドキュメントの変更

この変更の一環として、ドキュメントの Pythonモジュールのインストールおよび Pythonモジュールの配布セクションが、簡単な開始およびFAQドキュメントとして完全に再設計されました。 ほとんどのパッケージドキュメントは、Python PackagingAuthorityが管理する PythonPackagingユーザーガイドと個々のプロジェクトのドキュメントに移動されました。

ただし、この移行は現在まだ完了していないため、これらのガイドのレガシーバージョンは、 Pythonモジュールのインストール(レガシーバージョン)および Pythonモジュールの配布(レガシーバージョン)として引き続き利用できます。

も参照してください

PEP 453 –Pythonインストールでのpipの明示的なブートストラップ
DonaldStufftとNickCoghlanによって作成されたPEPは、Donald Stufft、Nick Coghlan、MartinvonLöwisおよびNedDeilyによって実装されました。


PEP 446:新しく作成されたファイル記述子は継承できません

PEP 446 は、新しく作成されたファイル記述子を継承不可にします。 一般に、これはアプリケーションが望む動作です。新しいプロセスを起動するときに、現在開いているファイルも新しいプロセスで開いていると、あらゆる種類の見つけにくいバグが発生し、セキュリティの問題が発生する可能性があります。

ただし、継承が必要な場合があります。 これらのケースをサポートするために、次の新しい関数とメソッドが使用可能です。

も参照してください

PEP 446 –新しく作成されたファイル記述子を継承不可にする
ビクター・スティンナーによって書かれ、実装されたPEP。


コーデック処理の改善

codecs モジュールは、最初に導入されて以来、常にタイプニュートラルな動的エンコーディングおよびデコーディングシステムとして動作することを目的としてきました。 ただし、Pythonテキストモデルとの緊密な結合、特に組み込みの strbytes 、および bytearray 型の型制限コンビニエンスメソッドは、歴史的にその事実を覆い隠してきました。 。

状況を明確にするための重要なステップとして、 codecs.encode()および codecs.decode()コンビニエンス関数がPython 2.7、3.3、および3.4で適切に文書化されるようになりました。 これらの関数は、Python 2.4以降コーデックモジュールに存在し(回帰テストスイートでカバーされています)、以前はランタイムイントロスペクションによってのみ検出可能でした。

の便利な方法とは異なり strバイトbytearray 、 NS コーデック便利な関数は、Unicodeテキストエンコーディング(Python 3)に限定されるのではなく、Python2とPython3の両方で任意のコーデックをサポートします。basestring basestring 変換(Python 2の場合)。

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)

最後に、上記の例が示すように、これらの改善により、Python3.2で復元された非Unicodeコーデックの便利なエイリアスの復元が可能になりました。 これは、(たとえば)16進表現との間のバイナリデータのエンコードを次のように記述できることを意味します。

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

標準ライブラリで提供されているバイナリ変換とテキスト変換については、バイナリ変換テキスト変換で詳しく説明されています。

:issue: `7475`:issue:` 17827`:issue: `17828`:issueでNickCoghlanが寄稿: `19619` 。)


PEP 451:インポートシステムのModuleSpecタイプ

PEP 451 は、インポートマシンがモジュールをロードするために使用するモジュールに関する情報(つまり、モジュール仕様)のカプセル化を提供します。 これにより、インポートの実装といくつかのインポート関連のAPIの両方が簡素化されます。 この変更は、いくつかの将来のインポート関連の改善の足がかりにもなります。

PEPからの公開された変更は、完全に下位互換性があります。 さらに、それらは輸入者の作者以外のすべての人に透過的でなければなりません。 キーファインダーとローダーのメソッドは非推奨になりましたが、引き続き機能します。 新しい輸入業者は、PEPで説明されている新しい方法を使用する必要があります。 新しいメソッドを実装するには、既存のインポーターを更新する必要があります。 置き換える必要のあるメソッドとその置き換えのリストについては、非推奨セクションを参照してください。


その他の言語の変更

コアPython言語に加えられたいくつかの小さな変更は次のとおりです。

  • UnicodeデータベースがUCDバージョン6.3に更新されました。
  • min()および max()は、 default キーワードのみの引数を受け入れるようになりました。この引数を使用して、評価している反復可能オブジェクトが持っている場合に返す値を指定できます。要素はありません。 (:issue: `18111` でJulianBermanによって寄稿されました。)
  • モジュールオブジェクトが weakref '可能になりました。
  • モジュール__file__属性(および関連する値)には、スクリプトが相対パスを使用して直接実行された場合の__main__.__file__を除いて、デフォルトで常に絶対パスが含まれるようになりました。 (:issue: `18416` のBrettCannonによる寄稿。)
  • surrogatepassエラーハンドラーが使用されていない限り、すべてのUTF- *コーデック(UTF-7を除く)はエンコードとデコードの両方でサロゲートを拒否するようになりました。ただし、UTF-16デコーダー(有効なサロゲートペアを受け入れる)とUTF-16エンコーダー(非BMP文字のエンコード中にそれらを生成します)。 (:issue: `12892` のVictorStinner、Kang-Hao(Kenny)Lu、Serhiy Storchakaによる寄稿。)
  • 新しいドイツ語EBCDIC コーデック cp273。 (:issue: `1097797` でMichaelBierenfeldとAndrewKuchlingによって寄稿されました。)
  • 新しいウクライナ語コーデック cp1125。 (:issue: `19668` でSerhiyStorchakaによって寄稿されました。)
  • bytes .join()および bytearray .join()は、引数として任意のバッファーオブジェクトを受け入れるようになりました。 (:issue: `15958` のAntoinePitrouによる寄稿。)
  • int コンストラクターは、 base 引数に__index__メソッドを持つすべてのオブジェクトを受け入れるようになりました。 (:issue: `16772` でMarkDickinsonによって寄稿されました。)
  • フレームオブジェクトには、フレームからローカル変数へのすべての参照をクリアする clear()メソッドが含まれるようになりました。 (:issue: `17934` のAntoinePitrouによる寄稿。)
  • memoryviewSequence として登録され、 reverse()ビルトインをサポートします。 (:issue: `18690` および:issue:` 19078` でNickCoghlanおよびClaudiuPopaによって寄稿されました。)
  • help()によって報告された署名は、 inspect および pydoc モジュールへの引数クリニックの導入およびその他の変更の結果として、いくつかのケースで変更および改善されました。 。
  • __ length_hint __()は、正式な言語仕様の一部になりました( PEP 424 を参照)。 (:issue: `16148` でArminRonacherによって寄稿されました。)


新しいモジュール

asyncio

新しい asyncio モジュール( PEP 3156 で定義)は、Pythonの標準のプラグ可能なイベントループモデルを提供し、標準ライブラリで確実な非同期IOサポートを提供します。他のイベントループの実装が標準ライブラリと相互運用しやすくなります。

Python 3.4の場合、このモジュールは暫定API と見なされます。

も参照してください

PEP 3156 –非同期IOサポートの再起動:「非同期」モジュール
Guido vanRossumが主導するPEPの作成と実装。


surepip

新しい ensurepip モジュールは、 PEP 453 実装の主要なインフラストラクチャです。 通常のイベントでは、エンドユーザーはこのモジュールを操作する必要はありませんが、インストールまたは仮想環境への自動ブートストラップが拒否された場合は、手動でpipをブートストラップするために使用できます。

ensurepip には、pipのバンドルコピーが含まれています。これは、同梱されているCPythonのリリースの最初のリリース候補の時点で最新のものです(これは、メンテナンスリリースと機能リリースの両方に適用されます)。 。 ensurepipはインターネットにアクセスしません。 インストールにインターネットアクセスがある場合、ensurepipの実行後、バンドルされたpipを使用して、pipをバンドルされたリリースよりも新しいリリースにアップグレードできます。 (このようなアップグレードされたバージョンのpipは、個別にインストールされたパッケージと見なされ、Pythonがアンインストールされても削除されないことに注意してください。)

このモジュールの名前は ensure pipです。これは、pipが既にインストールされているときに呼び出された場合、何も実行されないためです。 また、--upgradeオプションがあり、既存のインストール済みバージョンのpipがバンドルされたコピーよりも古い場合、pipのバンドルされたコピーをインストールします。


列挙型

新しい enum モジュール( PEP 435 で定義)は、列挙型の標準実装を提供し、他のモジュール( socket など)を許可します。不透明な整数定数を下位互換性のある列挙値に置き換えることにより、より有益なエラーメッセージとより優れたデバッグサポートを提供します。

も参照してください

PEP 435 –Python標準ライブラリへの列挙型の追加
Barry Warsaw、Eli Bendersky、Ethan Furmanによって作成されたPEPは、EthanFurmanによって実装されました。


pathlib

新しい pathlib モジュールは、さまざまなオペレーティングシステムに適したセマンティクスでファイルシステムパスを表すクラスを提供します。 パスクラスは、I / Oなしの純粋な計算操作を提供する純粋なパスと、純粋なパスから継承するがI / O操作も提供する具象パスに分けられます。

Python 3.4の場合、このモジュールは暫定API と見なされます。

も参照してください

PEP 428 – pathlibモジュール–オブジェクト指向ファイルシステムパス
AntoinePitrouによって作成および実装されたPEP。


セレクター

新しい selectors モジュール( PEP 3156 の実装の一部として作成)は、 select [に基づいて構築された高レベルで効率的なI / O多重化を可能にします。 X170X]モジュールプリミティブ。


統計

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

も参照してください

PEP 450 –標準ライブラリへの統計モジュールの追加
Steven D'Apranoによって作成および実装されたPEP


tracemalloc

新しい tracemalloc モジュール( PEP 454 で定義)は、Pythonによって割り当てられたメモリブロックをトレースするためのデバッグツールです。 次の情報を提供します。

  • オブジェクトが割り当てられた場所をトレースします
  • ファイル名ごとおよび行番号ごとに割り当てられたメモリブロックの統計:割り当てられたメモリブロックの合計サイズ、数、および平均サイズ
  • 2つのスナップショットの差を計算して、メモリリークを検出します

も参照してください

PEP 454 –Pythonメモリ割り当てをトレースするための新しいtracemallocモジュールを追加します
VictorStinnerによって作成および実装されたPEP


改善されたモジュール

abc

新しい関数 abc.get_cache_token()を使用して、オブジェクトグラフの変更によって影響を受けるキャッシュをいつ無効にするかを知ることができます。 (:issue: `16832` のŁukaszLangaによる寄稿。)

新しいクラス ABC には、メタクラスとして ABCMeta があります。 ABCを基本クラスとして使用すると、基本的にmetaclass=abc.ABCMetaを指定するのと同じ効果がありますが、入力が簡単で読みやすくなります。 (:issue: `16049` のBrunoDupuisによる寄稿。)


aifc

getparams()メソッドは、プレーンタプルではなく名前付きタプルを返すようになりました。 (:issue: `17818` のClaudiuPopaによる寄稿。)

aifc.open()がコンテキスト管理プロトコルをサポートするようになりました。 with ブロックで使用すると、返されたオブジェクトの close()メソッドが自動的に呼び出されます。ブロックの終わりに。 (:issue: `16486` のSerhiyStorchachaによる寄稿。)

writeframesraw()および writeframes()メソッドは、バイトのようなオブジェクトを受け入れるようになりました。 (:issue: `8311` のSerhiyStorchakaによる寄稿。)


argparse

FileType クラスは、 encoding および errors 引数を受け入れるようになりました。これらは、 open()に渡されます。 (:issue: `11175` でLucasMaystreによって寄稿されました。)


audioop

audioop は24ビットサンプルをサポートするようになりました。 (:issue: `12866` でSerhiyStorchakaによって寄稿されました。)

新しい byteswap()関数は、ビッグエンディアンのサンプルをリトルエンディアンに、またはその逆に変換します。 (:issue: `19641` でSerhiyStorchakaによって寄稿されました。)

すべての audioop 関数は、バイトのようなオブジェクトを受け入れるようになりました。 文字列は受け入れられません。以前は機能していませんでしたが、すぐにエラーが発生します。 (:issue: `16685` のSerhiyStorchakaによる寄稿。)


base64

base64 のエンコードおよびデコード関数は、以前に bytes または bytearray インスタンスが必要だった場合に、 bytesのようなオブジェクトを受け入れるようになりました。 (:issue: `17839` でNickCoghlanによって寄稿されました。)

新しい関数 a85encode()a85decode()b85encode()、および b85decode()は、バイナリをエンコードおよびデコードする機能を提供しますAscii85およびgit / mercurial Base85形式との間のデータ。 a85関数には、Adobeバリアントを含むAscii85エンコーディングのバリアントと互換性を持たせるために使用できるオプションがあります。 (Martin Morrison、Mercurialプロジェクト、Serhiy Storchaka、およびAntoine Pitrouが:issue: `17618` で寄稿しました。)


コレクション

ChainMap.new_child()メソッドは、チェーンに追加する子マップを指定する m 引数を受け入れるようになりました。 これにより、既存のマッピングやカスタムマッピングタイプを子に使用できます。 (:issue: `16613` でVinaySajipによって寄稿されました。)


colorsys

RGB — YIQ変換の係数の桁数が拡張され、FCCNTSCバージョンと一致するようになりました。 結果の変化は1%未満である必要があり、他の場所で見つかった結果とより一致する可能性があります。 (:issue: `14323` でBrianLandersとSerhiyStorchakaによって寄稿されました。)


contextlib

新しい contextlib.suppress コンテキストマネージャーは、単一のステートメントからの例外を意図的に抑制するコードの意図を明確にするのに役立ちます。 (:issue: `15806` のRaymondHettingerと:issue:` 19266` のZeroPiraeusによる寄稿。)

新しい contextlib.redirect_stdout()コンテキストマネージャーを使用すると、ユーティリティスクリプトが出力を sys.stdout に書き込む柔軟性のないAPIを簡単に処理でき、リダイレクトするオプションが提供されません。 コンテキストマネージャーを使用すると、 sys.stdout 出力を他のストリームにリダイレクトしたり、 io.StringIO と組み合わせて文字列にリダイレクトしたりできます。 後者は、たとえば、コマンドラインインターフェイスを実装するために作成された関数からの出力をキャプチャする場合に特に役立ちます。 sys.stdout のグローバル状態に影響するため、ユーティリティスクリプトにのみお勧めします。 (:issue: `15805` でRaymondHettingerによって寄稿されました。)

contextlib のドキュメントも更新され、シングルユース、再利用可能、および再入可能なコンテキストマネージャーの違いに関するディスカッションが含まれるようになりました。


dbm

dbm.open()オブジェクトがコンテキスト管理プロトコルをサポートするようになりました。 with ステートメントで使用すると、データベースオブジェクトのcloseメソッドがブロックの最後で自動的に呼び出されます。 (:issue: `19282` でClaudiuPopaとNickCoghlanによって寄稿されました。)


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()もあります(つまり、print(Bytecode.from_traceback(tb).dis())distb(tb)と同等です] )。

:issue: `11816` のNickCoghlan、Ryan Kelly、Thomas Kluyver、:issue:` 17916` のClaudiuPopaによる寄稿。)

新しい関数 stack_effect()は、指定されたオペコードと引数のPythonスタックへの影響を計算します。これは、他の方法では利用できない情報です。 (:issue: `19722` のLarryHastingsによる寄稿。)


doctest

新しいオプションフラグFAIL_FAST は、最初の障害が検出されるとすぐにテストの実行を停止します。 (Rによる寄稿。 のDavidMurrayとDanielUrban:issue: `16522` 。)

doctest コマンドラインインターフェイスは argparse を使用するようになり、-o-fの2つの新しいオプションが追加されました。 -o でサポートされている同様のオプションと同等です。 X171X] unittest CLI)。 (Rによる寄稿。 :issue: `11390` のDavidMurray。)

doctest は、拡張モジュール__doc__文字列でdoctestを検出するようになりました。 (:issue: `3158` のZacharyWareによる寄稿。)


Eメール

as_string()は、 policy 引数を受け入れて、メッセージの文字列表現を生成するときにメッセージのデフォルトポリシーをオーバーライドするようになりました。 これは、フォーマットパラメータをflattenメソッドに渡すために、ジェネレーターを作成して使用する代わりに、as_stringをより多くの状況で使用できることを意味します。 (Rによる寄稿。 のDavidMurray:issue: `18600` 。)

as_stringが文字列表現を生成するのと同様の方法でメッセージのバイト表現を生成するために、新しいメソッド as_bytes()が追加されました。 maxheaderlen 引数は受け入れませんが、 unixfrom および policy 引数は受け入れます。 Message __ bytes __()メソッドがそれを呼び出します。つまり、bytes(mymsg)は、完全にフォーマットされたメッセージを含むバイトオブジェクトという直感的な結果を生成します。 (Rによる寄稿。 のDavidMurray:issue: `18600` 。)

Message.set_param()メッセージは、 replace キーワード引数を受け入れるようになりました。 指定すると、関連するヘッダーは、ヘッダーのリスト内の場所を変更せずに更新されます。 下位互換性のために、デフォルトはFalseです。 (Rによる寄稿。 のDavidMurray:issue: `18891` 。)

Message の新しいサブクラスのペア( EmailMessage および MIMEPart )が、新しいサブモジュール contentmanager および新しいポリシー属性 content_manager 。 現在、すべてのドキュメントは新しいモジュールに含まれています。このモジュールは、メールの新しい暫定API の一部として追加されています。 これらのクラスは、電子メールメッセージからのコンテンツの抽出と電子メールメッセージへのコンテンツの挿入をはるかに簡単にする多くの新しいメソッドを提供します。 詳細については、 contentmanager のドキュメントおよび email:Examples を参照してください。 これらのAPIの追加により、email6プロジェクトの一部として計画された作業の大部分が完了します。 現在暫定的なAPIは、Python 3.5で最終的になる予定です(エラー処理の領域でいくつかのマイナーな追加が行われる可能性があります)。 (Rによる寄稿。 のDavidMurray:issue: `18891` 。)


filecmp

新しい clear_cache()関数は、 filecmp 比較キャッシュをクリアする機能を提供します。このキャッシュは、 os.stat()情報を使用して、ファイルが変更されたかどうかを判断します。最後の比較。 これは、たとえば、特定のファイルシステムのファイル変更時間フィールドの解像度よりも短い時間でファイルが変更および再チェックされた可能性がある場合に使用できます。 (:issue: `18149` のMarkLevittによる寄稿。)

新しいモジュール属性 DEFAULT_IGNORES は、 dircmp()関数の ignore パラメーターのデフォルト値として使用されるディレクトリーのリストを提供します。 (:issue: `15442` でEliBenderskyによって寄稿されました。)


functools

新しい partialmethod()記述子は、 partial()が通常の呼び出し可能オブジェクトを提供するのと同じように、部分引数アプリケーションを記述子にもたらします。 新しい記述子により、クラス定義に含まれている場合、任意の呼び出し可能オブジェクト( partial()インスタンスを含む)を通常のインスタンスメソッドのように動作させることも簡単になります。 (:issue: `4331` でAlonHorevとNickCoghlanによって寄稿されました。)

新しい singledispatch()デコレータは、Python標準ライブラリにシングルディスパッチジェネリック関数のサポートをもたらします。 オブジェクト指向プログラミングが共通のデータセットに対する複数の操作をクラスにグループ化することに焦点を当てているのに対し、総称関数は、異なる種類のデータを処理できるようにする操作の複数の実装をグループ化することに焦点を当てています。

も参照してください

PEP 443 –シングルディスパッチジェネリック関数
ŁukaszLangaによって作成および実装されたPEP。


total_ordering()は、基になる比較関数からの NotImplemented の戻り値をサポートするようになりました。 (:issue: `10042` でKatieMillerによって寄稿されました。)

partial()関数の純粋なPythonバージョンがstdlibにあります。 CPythonでは、Cアクセラレーションバージョンによってオーバーライドされますが、他の実装で使用できます。 (:issue: `12428` でBrianThorneによって寄稿されました。)


gc

新しい関数 get_stats()は、インタープリターの起動以降のコレクション統計を含む3つの世代ごとの辞書のリストを返します。 (:issue: `16351` のAntoinePitrouによる寄稿。)


グロブ

新しい関数 escape()は、ファイル名内の特殊文字をエスケープする方法を提供します。これにより、特殊文字はグロブ展開の一部にはならず、文字通り一致します。 (:issue: `8402` のSerhiyStorchakaによる寄稿。)


hashlib

新しい hashlib.pbkdf2_hmac()関数は、 PKCS#5パスワードベースの鍵導出関数2 を提供します。 (:issue: `18582` でChristianHeimesによって寄稿されました。)

hashlib ハッシュオブジェクトの name 属性は、正式にサポートされるインターフェイスになりました。 これはCPythonの hashlib に常に存在していましたが(サポートされているすべてのハッシュに対して小文字の名前は返されませんでした)、パブリックインターフェイスではなかったため、他の一部のPython実装では以前はサポートされていませんでした。 (JasonRによる寄稿。 のクーム:issue: `18532` 。)


hmac

hmac は、 new()関数の key 引数にbytearraybytesを受け入れるようになりました。 new()関数と update()メソッドの両方のX127X] msg パラメーターは、 hashlib モジュールでサポートされるすべての型を受け入れるようになりました。 (:issue: `18240` のJonasBorgströmによる寄稿。)

hmac.new()関数の digestmod 引数は、 hashlib によって認識される任意のハッシュダイジェスト名になります。 さらに、 digestmod の値がデフォルトでMD5になる現在の動作は非推奨になりました。将来のバージョンのPythonでは、デフォルト値はありません。 (:issue: `17276` のChristianHeimesによる寄稿。)

block_size および name 属性(および digest_size 属性の正式なドキュメント)の追加により、 hmac モジュールは完全にに準拠するようになりました。 PEP 247 API。 (:issue: `18775` でChristianHeimesによって寄稿されました。)


html

新しい関数 unescape()関数は、HTML5文字参照を対応するUnicode文字に変換します。 (:issue: `2927` のEzioMelottiによる寄稿。)

HTMLParser は、新しいキーワード引数 convert_charrefs を受け入れます。これは、Trueの場合、すべての文字参照を自動的に変換します。 下位互換性のために、その値のデフォルトはFalseですが、Pythonの将来のバージョンではTrueに変更されるため、明示的に設定し、この新しいコードを使用するようにコードを更新することをお勧めします特徴。 (:issue: `13633` のEzioMelottiによる寄稿。)

HTMLParserstrict 引数は非推奨になりました。 (:issue: `15114` のEzioMelottiによる寄稿。)


http

send_error()は、オプションの追加の Explain パラメーターを受け入れるようになりました。これを使用して、拡張エラーの説明を提供し、ハードコードされたデフォルトがある場合はそれをオーバーライドします。 この拡張エラーの説明は、error_message_format属性を使用してフォーマットされ、エラー応答の本文として送信されます。 (:issue: `12921` でKarlCowによって寄稿されました。)

http.server コマンドラインインターフェイスに、サーバーが特定のアドレスでリッスンするようにする-b/--bindオプションが追加されました。 (:issue: `17764` のMalteSwartによる寄稿。)


idlelibとIDLE

idlelibはIDLEシェルとエディターを実装し、他のプログラムによるインポートを目的としていないため、リリースごとに改善されます。 3.3.0以降の変更の累積リスト、および将来の3.4.xリリースで行われた変更については、Lib/idlelib/NEWS.txtを参照してください。 このファイルは、IDLE ヘルプ‣IDLEダイアログからも入手できます。


importlib

InspectLoader ABCは、ソースデータとパスを受け入れてコードオブジェクトを返す新しいメソッド source_to_code()を定義します。 デフォルトの実装はcompile(data, path, 'exec', dont_inherit=True)と同等です。 (:issue: `15627` でEricSnowとBrettCannonによって寄稿されました。)

InspectLoader にも、 get_code()メソッドのデフォルトの実装があります。 ただし、パフォーマンス上の理由から、通常はデフォルトの実装をオーバーライドすることが望ましいでしょう。 (:issue: `18072` のBrettCannonによる寄稿。)

reload()関数は、 imp モジュールの非推奨の一環として、 imp から importlib に移動されました。 (:issue: `18193` のBerkerPeksagによる寄稿。)

importlib.utilMAGIC_NUMBER 属性が追加され、バイトコードのバージョン番号にアクセスできるようになりました。 これは、非推奨の imp モジュールの get_magic()関数を置き換えます。 (:issue: `18192` のBrettCannonによる寄稿。)

新しい importlib.util 関数 cache_from_source()および source_from_cache()は、非推奨の imp モジュールの同じ名前の関数を置き換えます。 (:issue: `18194` のBrettCannonによる寄稿。)

importlib ブートストラップNamespaceLoaderInspectLoader ABCに準拠するようになりました。つまり、runpypython -mを名前空間で使用できるようになりました。パッケージ。 (:issue: `18058` のBrettCannonによる寄稿。)

importlib.util には、ユニバーサル改行処理を使用してバイトからソースをデコードする新しい関数 decode_source()があります。 これは、InspectLoader.get_source()メソッドを実装するのに役立ちます。

importlib.machinery.ExtensionFileLoaderget_filename()メソッドが追加されました。 これは、元の実装では誤って省略されていました。 (:issue: `19152` のEricSnowによる寄稿。)


検査する

inspect モジュールは、モジュール、クラス、および関数のソースコードやその他の情報をすばやく表示するための基本的なコマンドラインインターフェイスを提供するようになりました。 (:issue: `18626` でClaudiuPopaとNickCoghlanによって寄稿されました。)

unwrap()を使用すると、 functools.wraps()(およびラッパー関数に__wrapped__属性を設定するその他のAPI)によって作成されたラッパー関数チェーンを簡単に解明できます。 。 (:issue: `13266` でDanielUrban、Aaron Iles、Nick Coghlanによって寄稿されました。)

新しい enum モジュールの実装の一部として、 inspect モジュールは、メタクラスを通じて提供されるカスタム__dir__メソッドと動的クラス属性のサポートを大幅に改善しました。 (:issue: `18929` および:issue:` 19030` でEthanFurmanによって寄稿されました。)

getfullargspec()および getargspec()は、 signature() APIを使用するようになりました。 これにより、__signature__属性を持つもの、引数クリニックによって提供されるメタデータを持つもの、 functools.partial()オブジェクトなど、はるかに幅広い呼び出し可能オブジェクトをサポートできます。 シグニチャ()とは異なり、これらの関数は__wrapped__属性を無視し、バインドされたメソッドのバインド済みの最初の引数を報告するため、を使用するようにコードを更新する必要があることに注意してください。 ]これらの機能が必要な場合は、signature()を直接使用します。 (:issue: `17481` でYurySelivanovによって寄稿されました。)

シグニチャ()は、ダックタイプのCPython関数をサポートするようになりました。これにより、Cythonでコンパイルされた関数のサポートが追加されます。 (:issue: `17159` でStefanBehnelとYurySelivanovによって寄稿されました。)


IPアドレス

ipaddress は、暫定API としてPython3.3の標準ライブラリに追加されました。 Python 3.4のリリースにより、この資格は削除されました。 ipaddress は、下位互換性を維持するための通常の標準ライブラリ要件でカバーされる安定したAPIと見なされるようになりました。

アドレスがグローバルにルーティング可能である場合、新しい is_global プロパティはTrueです。 (:issue: `17400` でPeterMoodyによって寄稿されました。)


ロギング

TimedRotatingFileHandler には、ロールオーバーが発生する時刻を指定するために使用できる新しい atTime パラメーターがあります。 (:issue: `9556` でRonaldOussorenによって寄稿されました。)

SocketHandler および DatagramHandler は、Unixドメインソケットをサポートするようになりました(ポートNoneに設定することにより)。 (コミットce46195b56a9でVinay Sajipによって寄稿されました。)

fileConfig()は、 fname パラメーターの configparser.RawConfigParser サブクラスインスタンスを受け入れるようになりました。 これにより、ロギング構成がアプリケーション構成全体の一部にすぎない場合、またはアプリケーションが fileConfig()に渡す前に構成を変更する場合に、構成ファイルの使用が容易になります。 (:issue: `16110` のVinaySajipによる寄稿。)

logging.config.listen()関数を介してソケットから受信したロギング構成データは、新しい verify キーワード引数の引数として検証関数を指定することにより、処理前に検証できるようになりました。 。 (:issue: `15452` のVinaySajipによる寄稿。)


元帥

デフォルトの marshal バージョンは3にバンプされました。 新しいバージョンを実装するコードは、インターンされた文字列のコピーを1つだけ記録し、逆シリアル化時にインターンを保持するというPython2の動作を復元し、この「1つのコピー」機能を任意のオブジェクトタイプ(再帰参照の処理を含む)に拡張します。 これにより、.pycファイルのサイズと、モジュールが.pyc(または.pyo)ファイルからロードされたときにメモリ内で占有するメモリの量の両方が削減されます。 (:issue: `16475` のKristjánValurJónssonによる寄稿、:issue:` 19219` のAntoinePitrouによる追加のスピードアップ。)


mmap

mmapオブジェクトを weakref edできるようになりました。 (:issue: `4885` のValerieLambertによる寄稿。)


マルチプロセッシング

Unixでは、マルチプロセッシングを使用してプロセスを開始するために、2つの新しい開始メソッドspawnおよびforkserverが追加されました。 これらにより、プロセスとスレッドの混合がより堅牢になり、spawnメソッドは、マルチプロセッシングがWindowsで常に使用してきたセマンティクスと一致します。 新しい関数 get_all_start_methods()は、プラットフォームで使用可能なすべての開始メソッドを報告し、 get_start_method()は現在の開始メソッドを報告し、 set_start_method()は開始メソッドを設定します。 (:issue: `8713` でRichardOudkerkによって寄稿されました。)

マルチプロセッシングには、子プロセスの作成方法を決定するcontextの概念も含まれるようになりました。 新しい関数 get_context()は、指定されたstartメソッドを使用するコンテキストを返します。 マルチプロセッシングモジュール自体と同じAPIを備えているため、このコンテキスト内で動作する Pool やその他のオブジェクトを作成するために使用できます。 これにより、フレームワークとアプリケーション、または同じアプリケーションの異なる部分が、互いに干渉することなくマルチプロセッシングを使用できるようになります。 (:issue: `18999` でRichardOudkerkによって寄稿されました。)

古い fork startメソッドを使用する場合を除いて、子プロセスは親から不要なハンドル/ファイル記述子を継承しなくなりました(:issue: `8713` の一部)。

マルチプロセッシングrunpy-mスイッチを実装)に依存して、spawnを使用するときに子プロセスで__main__を適切に初期化します。またはforkserver startメソッド。 これにより、マルチプロセッシング、-mコマンドラインスイッチ、および明示的な相対インポートを組み合わせると、子プロセスで不明瞭な障害が発生する可能性があるいくつかのエッジケースが解決されます。 (:issue: `19946` でNickCoghlanによって寄稿されました。)


オペレーター

新しい関数 length_hint()は、 PEP 424の一部として、 __ length_hint __()特殊メソッドの使用方法に関する仕様の実装を提供します。 この言語機能の正式な仕様。 (:issue: `16148` でArminRonacherによって寄稿されました。)

operator モジュールの純粋なPythonバージョンが参照可能になり、Pythonの代替実装で使用できるようになりました。 (:issue: `16694` のZacharyWareによる寄稿。)


os

ファイル記述子( os.get_inheritable()os.set_inheritable())またはWindowsハンドルの継承可能フラグを取得および設定するための新しい関数があります( os.get_handle_inheritable()os.set_handle_inheritable())。

新しい関数 cpu_count()は、Pythonが実行されているプラットフォームで使用可能なCPUの数を報告します(カウントが決定できない場合はNone)。 multiprocessing.cpu_count()関数は、この関数の観点から実装されています)。 (:issue: `17914` で、Trent Nelson、Yogesh Chaudhari、Victor Stinner、Charles-FrançoisNataliによって寄稿されました。)

os.path.samestat()がWindowsプラットフォームで利用できるようになりました( os.path.samefile()の実装がUnixとWindowsで共有されるようになりました)。 (:issue: `11939` でBrianCurtinによって寄稿されました。)

os.path.ismount()は、Windowsのドライブルートの下にマウントされたボリュームを認識するようになりました。 (:issue: `9035` でTimGoldenによって寄稿されました。)

os.open()は、それらを提供するプラットフォームで2つの新しいフラグをサポートします。 O_PATH (開かれていないファイル記述子)と O_TMPFILE (名前のない一時ファイル。 3.4.0リリースのバージョンは、カーネルバージョンが3.11以降でuapiヘッダーを持つLinuxシステムでのみ使用できます。 (:issue: `18673` とBenjaminPetersonでそれぞれChristianHeimesによって寄稿されました。)


pdb

pdb は、ジェネレーター、 yield 、およびyield fromをより便利な方法で処理するように拡張されました。 これは、 asyncio ベースのプログラムをデバッグするときに特に役立ちます。 (:issue: `16596` でAndrewSvetlovとXavierde Gayeによって寄稿されました。)

printコマンドが pdb から削除され、pdbコマンドラインからPython print()関数へのアクセスが復元されました。 Python2のpdbにはprintコマンドがありませんでした。 代わりに、printと入力すると、printステートメントが実行されました。 Python3では、printが誤ってpdb :pdbcmd: `p` コマンドのエイリアスになりました。 ただし、pは、Python2 printコマンドのようにstrではなく引数のreprを出力します。 さらに悪いことに、Python3 pdb printコマンドはPython3 print関数をシャドウイングし、pdbプロンプトでアクセスできなくなりました。 (:issue: `18764` でConnorOsbornによって寄稿されました。)


きゅうりのピクルス

pickle は、新しいpickleプロトコルであるプロトコル4をサポートするようになりました(ただし、デフォルトでは使用されません)。 この新しいプロトコルは、ネストされたクラス、非常に大きな文字列とコンテナ、__new__()メソッドがキーワードのみの引数を取るクラスなど、以前のプロトコルに存在していた多くの問題に対処します。 また、いくつかの効率の改善を提供します。

も参照してください

PEP 3154 –ピクルスプロトコル4
Antoine Pitrouによって作成され、AlexandreVassalottiによって実装されたPEP。


plistlib

plistlib には、stdlibシリアル化プロトコルの標準パターンと同様のAPIがあり、新しい load()dump()load( )、および dumps()関数。 (古いAPIは非推奨になりました。)すでにサポートされているXML plist形式( FMT_XML )に加えて、バイナリplist形式( FMT_BINARY )もサポートするようになりました。 (:issue: `14455` でRonaldOussorenらによって寄稿されました。)


poplib

poplib に2つの新しいメソッドが追加されました。POPサーバーによってアドバタイズされた機能のリストを返す capa()と、切り替える stls()です。 POPサーバーがサポートしている場合は、クリアテキストのPOP3セッションを暗号化されたPOP3セッションに変換します。 (:issue: `4473` でLorenzoCatucciによって寄稿されました。)


pprint

pprint モジュールの PrettyPrinter クラスとその pformat()、および pprint()関数に新しいオプション complex [ X148X]、出力のフォーマット方法を制御します。 現在 compactTrueに設定しているということは、各(インデントされた)行の width 内に収まる数のシーケンス要素でシーケンスが印刷されることを意味します。 (:issue: `19132` でSerhiyStorchakaによって寄稿されました。)

長い文字列は、Pythonの通常の行継続構文を使用してラップされるようになりました。 (:issue: `17150` のAntoinePitrouによる寄稿。)


pty

pty.spawn()は、Noneではなく、子プロセスの os.waitpid()からステータス値を返すようになりました。 (GregoryPによる寄稿。 スミス。)


pydoc

pydoc モジュールは inspect.signature()イントロスペクションAPIに直接基づいており、さまざまな呼び出し可能オブジェクトの署名情報を提供できるようになりました。 この変更は、ヘルプ情報を表示するときに__wrapped__属性が考慮されるようになったことも意味します。 (:issue: `19674` のLarryHastingsによる寄稿。)

pydoc モジュールは、すでにバインドされているメソッドのselfパラメーターを表示しなくなりました。 代わりに、提供された呼び出し可能オブジェクトの正確な現在の署名を常に表示することを目的としています。 (:issue: `20710` のLarryHastingsによる寄稿。)

pydoc に直接加えられた変更に加えて、カスタム__dir__メソッドの処理とさまざまな記述子の動作も、 inspect [の根本的な変更によって大幅に改善されました。 X231X]モジュール。

help()ビルトインは pydoc に基づいているため、上記の変更は help()の動作にも影響します。


NS

新しい fullmatch()関数とregex.fullmatch()メソッドは、文字列の両端でパターンを固定して一致させます。 これにより、一致の目的を明確にする方法が提供され、コードの変更または既存の正規表現への代替の追加中に$文字が失われるという微妙なバグのクラスが回避されます。 (:issue: `16203` のMatthewBarnettによる寄稿。)

正規表現オブジェクトのreprに、パターンとフラグが含まれるようになりました。 一致オブジェクトのreprには、開始、終了、および一致した文字列の部分が含まれるようになりました。 (:issue: `13592` および:issue:` 17087` でHugoLopesTavaresおよびSerhiyStorchakaによって寄稿されました。)


資源

新しい prlimit()関数は、カーネルバージョン2.6.36以降およびglibc 2.13以降のLinuxプラットフォームで使用可能であり、作成中のプロセス以外のプロセスのリソース制限を照会または設定する機能を提供します。呼び出し。 (:issue: `16595` でChristianHeimesによって寄稿されました。)

Linuxカーネルバージョン2.6.36以降では、いくつかの新しいLinux固有の定数もあります: RLIMIT_MSGQUEUERLIMIT_NICERLIMIT_RTPRIORLIMIT_RTTIME 、および RLIMIT_SIGPENDING 。 (:issue: `19324` でChristianHeimesによって寄稿されました。)

FreeBSDバージョン9以降では、いくつかの新しいFreeBSD固有の定数 RLIMIT_SBSIZERLIMIT_SWAP 、および RLIMIT_NPTS があります。 (:issue: `19343` でClaudiuPopaによって寄稿されました。)


選択する

epoll オブジェクトがコンテキスト管理プロトコルをサポートするようになりました。 with ステートメントで使用すると、 close()メソッドがブロックの最後で自動的に呼び出されます。 (:issue: `16488` でSerhiyStorchakaによって寄稿されました。)

devpoll オブジェクトには、 fileno()メソッドと close()メソッド、および新しい属性 closed が含まれるようになりました。 (:issue: `18794` でVictorStinnerによって寄稿されました。)


Shelf インスタンスは、 with ステートメントで使用できるようになり、withブロックの最後で自動的に閉じられます。 (:issue: `13896` のFilipGruszczyńskiによる寄稿。)


シャティル

copyfile()は、ソースと宛先が同じファイルである場合に、特定の Error サブクラス SameFileError を発生させるようになりました。これにより、アプリケーションはこれに対して適切なアクションを実行できます。特定のエラー。 (:issue: `1492704` で石本敦夫とHynekSchlawackによって寄稿されました。)


smtpd

SMTPServer クラスと SMTPChannel クラスは、 map キーワード引数を受け入れるようになりました。この引数は、指定されている場合、 asynchat.async_chat にとして渡されます。 X173X] map 引数。 これにより、アプリケーションはグローバルソケットマップへの影響を回避できます。 (:issue: `11959` でVinaySajipによって寄稿されました。)


smtplib

SMTPExceptionOSError のサブクラスになりました。これにより、ソケットレベルのエラーとSMTPプロトコルレベルのエラーの両方を、エラーかどうかだけを気にするコードによって1つのtry / exceptステートメントでキャッチできます。発生した。 (:issue: `2118` でNedJackson Lovelyによって寄稿されました。)


ソケット

ソケットモジュールは、それをサポートするプラットフォームで CAN_BCM プロトコルをサポートするようになりました。 (:issue: `15359` でBrianThorneによって寄稿されました。)

ソケットオブジェクトには、継承可能フラグget_inheritable()、および set_inheritable()を取得または設定するための新しいメソッドがあります。

socket.AF_*およびsocket.SOCK_*定数は、新しい enum モジュールを使用した列挙値になりました。 これにより、整数の「マジックナンバー」の代わりに、意味のある名前をデバッグ中に出力できます。

AF_LINK 定数がBSDおよびOSXで利用できるようになりました。

inet_pton()および inet_ntop()がWindowsでサポートされるようになりました。 (:issue: `7171` で石本敦夫によって寄稿されました。)


sqlite3

connect()関数の新しいブールパラメータ uri を使用して、 database パラメータがuriであることを示すことができます(を参照)。 SQLite URIドキュメント)。 (:issue: `13773` のpoqによって寄稿されました。)


ssl

PROTOCOL_TLSv1_1 および PROTOCOL_TLSv1_2 (TLSv1.1およびTLSv1.2サポート)が追加されました。 これらのプロトコルのサポートは、PythonがOpenSSL1.0.1以降とリンクされている場合にのみ利用できます。 (:issue: `16692` でMicheleOrrùとAntoinePitrouによって寄稿されました。)

新しい関数 create_default_context()は、互換性とセキュリティの適切なバランスをとることを目的とした設定の SSLContext を取得するための標準的な方法を提供します。 これらの設定は、 SSLContext コンストラクターによって提供されるデフォルトよりも厳格であり、ベストプラクティスのセキュリティ要件が変更された場合、事前の非推奨なしに将来調整される可能性があります。 SSLをサポートするstdlibライブラリを使用するための新しい推奨ベストプラクティスは、 create_default_context()を使用して SSLContext オブジェクトを取得し、必要に応じて変更してから、として渡すことです。適切なstdlibAPIのcontext 引数。 (:issue: `19689` でChristianHeimesによって寄稿されました。)

SSLContext メソッド load_verify_locations()は、新しいオプションの引数 cadata を受け入れます。これを使用して、PEMまたはDERでエンコードされた証明書をそれぞれ文字列またはバイトで直接提供できます。 (:issue: `18138` でChristianHeimesによって寄稿されました。)

新しい関数 get_default_verify_paths()は、 set_default_verify_paths()メソッドがOpenSSLのデフォルトのcafileおよびcapathを設定するために使用するパスと環境変数の名前付きタプルを返します]。 これは、デフォルトの検証の問題をデバッグするのに役立ちます。 (:issue: `18143` でChristianHeimesによって寄稿されました。)

SSLContext には、ロードされたX.509証明書、X.509 CA証明書、および証明書失効リスト([ X169X] s)、およびロードされたCA証明書のリストを返す get_ca_certs()メソッド。 (:issue: `18147` でChristianHeimesによって寄稿されました。)

OpenSSL 0.9.8以降が使用可能な場合、 SSLContext には新しい属性 verify_flags があり、新しい定数の組み合わせに設定することで、証明書検証プロセスを制御できます。 ] VERIFY_DEFAULTVERIFY_CRL_CHECK_LEAFVERIFY_CRL_CHECK_CHAIN 、または VERIFY_X509_STRICT 。 OpenSSLは、デフォルトではCRL検証を行いません。 (:issue: `8813` でChristienHeimesによって寄稿されました。)

新しい SSLContext メソッド load_default_certs()は、プラットフォームによって異なるデフォルトの場所から一連のデフォルトの「認証局」(CA)証明書をロードします。 これは、クライアントがサーバーの検証に使用するTLS Webサーバー認証証明書(purpose= SERVER_AUTH )と、サーバーがクライアント証明書の検証に使用する証明書([ X214X] CLIENT_AUTH )。 (:issue: `19292` でChristianHeimesによって寄稿されました。)

2つの新しいWindows専用関数 enum_certificates()enum_crls()は、Windows証明書ストアから証明書、証明書情報、およびCRLを取得する機能を提供します。 (:issue: `17134` でChristianHeimesによって寄稿されました。)

新しい ssl.SSLContext.set_servername_callback()メソッドを使用したサーバー側SNI(サーバー名表示)のサポート。 (:issue: `8109` でDanielBlackによって寄稿されました。)

SSLSocket.getpeercert()によって返されるディクショナリには、追加のX509v3拡張アイテム(crlDistributionPointscalIssuers、およびOCSP URI)が含まれています。 (:issue: `18379` でChristianHeimesによって寄稿されました。)


統計

stat モジュールは、_statのC実装によってサポートされるようになりました。 ほとんどの値は標準化されておらず、プラットフォームに依存するため、AC実装が必要です。 (:issue: `11016` でChristianHeimesによって寄稿されました。)

このモジュールは、新しい ST_MODE フラグ、 S_IFDOORS_IFPORT 、および S_IFWHT をサポートします。 (:issue: `11016` でChristianHiemesによって寄稿されました。)


構造体

コンパイルされた形式の新しい関数 iter_unpack と新しい struct.Struct.iter_unpack()メソッドは、特定の形式のデータの繰り返しインスタンスを含むバッファーのストリーミングアンパックを提供します。 (:issue: `17804` のAntoinePitrouによる寄稿。)


サブプロセス

check_output()は、実行されるコマンドのstdinの内容を提供するために使用できる input 引数を受け入れるようになりました。 (:issue: `16624` でZackWeinbergによって寄稿されました。)

getstatus()および getstatusoutput()がWindowsで機能するようになりました。 この変更は、実際には3.3.4で誤って行われたものです。 (:issue: `10197` でTimGoldenによって寄稿されました。)


スナウ

getparams()メソッドは、プレーンタプルではなく名前付きタプルを返すようになりました。 (:issue: `18901` のClaudiuPopaによる寄稿。)

sunau.open()がコンテキスト管理プロトコルをサポートするようになりました。 with ブロックで使用すると、返されたオブジェクトのcloseメソッドが最後に自動的に呼び出されます。ブロックの。 (:issue: `18878` でSerhiyStorchakaによって寄稿されました。)

AU_write.setsampwidth()は24ビットサンプルをサポートするようになり、モジュールを使用して24サンプルを書き込むためのサポートが追加されました。 (:issue: `19261` でSerhiyStorchakaによって寄稿されました。)

writeframesraw()および writeframes()メソッドは、バイトのようなオブジェクトを受け入れるようになりました。 (:issue: `8311` のSerhiyStorchakaによる寄稿。)


sys

新しい関数 sys.getallocatedblocks()は、インタープリターによって割り当てられた現在のブロック数を返します。 (デフォルトの--with-pymalloc設定のCPythonでは、これは PyObject_Malloc() APIを介して行われる割り当てです。)これは、特にテストスイートを介して自動化されている場合、メモリリークの追跡に役立ちます。 (:issue: `13390` のAntoinePitrouによる寄稿。)

Pythonインタープリターがインタラクティブモードで起動すると、 sys モジュールの __ Interactivehook __ 属性をチェックします。 属性が存在する場合、その値は、対話モードが開始される直前に引数なしで呼び出されます。 PYTHONSTARTUP ファイルが読み取られた後にチェックが行われるため、そこで設定できます。 site モジュールは、プラットフォームが readline をサポートしている場合に、タブ補完と履歴保存(~/.python-history内)を可能にする関数に設定します。 この(新しい)動作が必要ない場合は、 PYTHONSTARTUPsitecustomize、またはusercustomizeでこの属性を[から削除することにより、オーバーライドできます。 X158X] sys (または他の呼び出し可能に設定)。 (:issue: `5845` でÉricAraujoとAntoinePitrouによって寄稿されました。)


tarfile

tarfile モジュールは、スクリプトとして直接または-mを介して呼び出されたときに、単純なコマンドラインインターフェイスをサポートするようになりました。 これは、tarfileアーカイブを作成および抽出するために使用できます。 (:issue: `13477` のBerkerPeksagによる寄稿。)


テキストの折り返し

TextWrapper クラスには、2つの新しい属性/コンストラクター引数があります。出力の行数を制限する max_lines と、出力の行数を制限する placeholder です。 max_lines のために切り捨てられた場合、出力の最後に表示されます。 これらの機能に基づいて、新しい便利な関数 shorten()は、入力内のすべての空白を単一のスペースに折りたたんで、で終わる特定のの単一行を生成します。 ]プレースホルダー(デフォルトでは[...])。 (:issue: `18585` および:issue:` 18725` でAntoinePitrouおよびSerhiyStorchakaによって寄稿されました。)


糸脱毛

メインスレッドを表す Thread オブジェクトは、新しい main_thread()関数から取得できます。 通常の状態では、これはPythonインタープリターが開始されたスレッドになります。 (:issue: `18882` でAndrewSvetlovによって寄稿されました。)


トレースバック

新しい traceback.clear_frames()関数は、トレースバックオブジェクトを受け取り、それが参照するすべてのフレームのローカル変数をクリアして、消費されるメモリの量を削減します。 (:issue: `1565525` でAndrewKuchlingによって寄稿されました。)


種類

新しい DynamicClassAttribute()記述子は、インスタンスオブジェクトを検索したときに正常に機能するが、クラス __getattr__にルーティングされる属性を定義する方法を提供します。クラスを通して見上げた。 これにより、クラスでアクティブなプロパティを持ち、同じ名前のクラスで仮想属性を持つことができます(例についてはEnumを参照)。 (:issue: `19030` でEthanFurmanによって寄稿されました。)


urllib

urllib.request は、 DataHandler クラスを介してdata: URLをサポートするようになりました。 (:issue: `16423` のMathiasPanzenböckによる寄稿。)

Request クラスで使用されるhttpメソッドは、サブクラスに method クラス属性を設定することで指定できるようになりました。 (:issue: `18978` のJasonR Coombsによる寄稿。)

Request オブジェクトが再利用可能になりました。 full_url または data 属性が変更されると、関連するすべての内部プロパティが更新されます。 これは、たとえば、同じ Request オブジェクトを複数の OpenerDirector.open()呼び出しで、異なる data 引数を使用して使用できるようになったことを意味します。または、 Requesturlを最初から再計算するのではなく、変更します。 Request からヘッダーを削除するために使用できる新しい remove_header()メソッドもあります。 (:issue: `16464` のAlexeyKachayev、:issue:` 17485` のDanielWozniak、:issue: `17272のDamienBrechtとSenthilKumaranによる寄稿`。)

HTTPError オブジェクトに、エラーに関連付けられたHTTP応答ヘッダーへのアクセスを提供する headers 属性が追加されました。 (:issue: `15701` のBerkerPeksagによる寄稿。)


単体テスト

TestCase クラスには新しいメソッド subTest()があり、 with ブロックが「サブテスト」になるコンテキストマネージャーを生成します。 このコンテキストマネージャーを使用すると、たとえば、ループ内でsubTestコンテキストマネージャーを呼び出すことにより、テストメソッドでサブテストを動的に生成できます。 これにより、単一のテスト方法で、個別に識別され、個別にカウントされたテストを無数に生成できます。これらのテストは、1つ以上が失敗した場合でも実行されます。 例えば:

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

結果として6つのサブテストが生成され、それぞれが単体テストの詳細出力で、変数名iとその変数の特定の値(i=0i=1など)で構成されるラベルで識別されます。 )。 この例の完全版については、サブテストを使用したテスト反復の識別を参照してください。 (:issue: `16997` のAntoinePitrouによる寄稿。)

unittest.main()は、 defaultTest の反復可能なテスト名を受け入れるようになりました。以前は、文字列として1つのテスト名しか受け入れていませんでした。 (:issue: `15132` でJyrkiPulliainenによって寄稿されました。)

テスト検出中に SkipTest が発生した場合(つまり、テストファイルのモジュールレベルで)、エラーではなくスキップとして報告されるようになりました。 (:issue: `16935` でZachWareによって寄稿されました。)

Discover()は、検出されたファイルを並べ替えて、一貫したテスト順序を提供するようになりました。 (:issue: `16709` でMartinMelinとJeffRamnaniによって寄稿されました。)

TestSuite は、テストが成功した場合、テストが実行されるとすぐにテストへの参照をドロップするようになりました。 ガベージコレクションを行うPythonインタープリターでは、これにより、テストへの参照を保持しているものが他にない場合に、テストをガベージコレクションすることができます。 カスタム_removeTestAtIndexメソッドを定義する TestSuite サブクラスを作成することにより、この動作をオーバーライドすることができます。 (:issue: `11798` でTomWardill、Matt McClure、Andrew Svetlovによって寄稿されました。)

新しいテストアサーションコンテキストマネージャー assertLogs()は、特定のコードブロックが logging モジュールを使用してログメッセージを出力することを保証します。 デフォルトでは、メッセージは任意のロガーから送信され、INFO以上の優先度を持つことができますが、ロガー名と代替の最小ログレベルの両方を指定できます。 コンテキストマネージャによって返されるオブジェクトは、ログに記録された LogRecord および/またはフォーマットされたメッセージについてクエリできます。 (:issue: `18937` のAntoinePitrouによる寄稿。)

テスト検出が名前空間パッケージで機能するようになりました(:issue: `17457` のClaudiuPopaによる寄稿)。

unittest.mock オブジェクトは、呼び出しを照合するときに仕様シグネチャを検査するようになりました。つまり、引数は、位置だけでなく、位置または名前のいずれかで照合できるようになりました。 (:issue: `17015` のAntoinePitrouによる寄稿。)

mock_open()オブジェクトにreadlineメソッドとreadlinesメソッドが追加されました。 (:issue: `17467` の倉富敏夫による寄稿。)


venv

venv には、cshおよびfishシェルのアクティベーションスクリプトが含まれるようになりました。 (:issue: `15417` でAndrewSvetlovによって寄稿されました。)

EnvBuildercreate()コンビニエンス関数は、新しいキーワード引数 with_pip を取ります。これは、デフォルトでFalseになり、[X172X ] EnvBuilder は、pipが仮想環境にインストールされていることを確認します。 ( PEP 453 実装の一部として:issue: `19552` でNickCoghlanによって寄稿されました。)


getparams()メソッドは、プレーンタプルではなく名前付きタプルを返すようになりました。 (:issue: `17487` でClaudiuPopaによって寄稿されました。)

wave.open()がコンテキスト管理プロトコルをサポートするようになりました。 (:issue: `17616` のClaudiuPopaによる寄稿。)

wave は、シークできないファイルに出力を書き込むことができるようになりました。 (:issue: `5202` のDavidJones、Guilherme Polo、およびSerhiy Storchakaによる寄稿。)

writeframesraw()および writeframes()メソッドは、バイトのようなオブジェクトを受け入れるようになりました。 (:issue: `8311` のSerhiyStorchakaによる寄稿。)


weakref

新しい WeakMethod クラスは、バインドされたメソッドへの弱い参照をシミュレートします。 (:issue: `14631` のAntoinePitrouによる寄稿。)

新しい finalize クラスを使用すると、弱参照自体のライフサイクルを注意深く管理しなくても、オブジェクトがガベージコレクションされたときに呼び出されるコールバックを登録できます。 (:issue: `15528` でRichardOudkerkによって寄稿されました。)

ref に関連付けられているコールバックがある場合は、 __ callback __ 属性を介して公開されるようになりました。 (:issue: `17643` でMarkDickinsonによって寄稿されました。)


xml.etree

新しいパーサー XMLPullParser を使用すると、非ブロッキングアプリケーションでXMLドキュメントを解析できます。 例は、非ブロッキング解析用のプルAPI で見ることができます。 (:issue: `17741` のAntoinePitrouによる寄稿。)

xml.etree.ElementTree tostring()および tostringlist()関数、および ElementTree write()[X134X ]メソッドに、 short_empty_elements キーワードのみのパラメーターが追加され、コンテンツのない要素を省略形(<tag />)または展開形( [ X333X])フォーム。 (:issue: `14377` でArielPoliakとSerhiyStorchakaによって寄稿されました。)


ZIPファイル

PyZipFile クラスの writepy()メソッドには、アーカイブに追加するディレクトリとファイルを制御するために使用できる新しい filterfunc オプションがあります。 たとえば、これを使用して、アーカイブからテストファイルを除外できます。 (:issue: `19274` でChristianTismerによって寄稿されました。)

ZipFile およびPyZipfileallowZip64 パラメーターは、デフォルトでTrueになりました。 (:issue: `17201` でWilliamMallardによって寄稿されました。)


CPython実装の変更

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

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

も参照してください

PEP 445 –Pythonメモリアロケータをカスタマイズするための新しいAPIを追加します
ビクター・スティンナーによって書かれ、実装されたPEP。


PEP 442:安全なオブジェクトのファイナライズ

PEP 442 は、CPythonでのオブジェクトファイナライズの現在の制限と癖を取り除きます。 これにより、__del__()メソッドを持つオブジェクト、および finally 句を持つジェネレーターは、参照サイクルの一部であるときにファイナライズできます。

この変更の一環として、ほとんどの場合、インタープリターのシャットダウン中にモジュールグローバルが None に強制的に設定されることはなくなり、代わりにサイクリックガベージコレクターの通常の操作に依存します。 これにより、サイクリックGCが最初に導入されて以来Pythonを悩ませてきた、通常は__del__メソッドに関連する、クラス全体のインタープリターシャットダウン時間エラーが回避されます。

も参照してください

PEP 442 –安全なオブジェクトのファイナライズ
AntoinePitrouによって作成および実装されたPEP。


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

PEP 456 は、Pythonのハッシュアルゴリズムで行われた以前のセキュリティ修正作業をフォローアップして、辞書ルックアップに裏打ちされた公開APIが対象となる可能性のある特定のDOS攻撃に対処します。 (現在の改善ラウンドの開始については、:issue: `14621` を参照してください。)PEPは、CPythonのハッシュコードを統合して、パッケージャーが別のハッシュアルゴリズムを簡単に置き換えられるようにし、Pythonのデフォルトの実装を切り替えます。 64ビットのデータ型を持つプラットフォームでのSipHash実装に。 古いFNVアルゴリズムと比較したパフォーマンスの違いはごくわずかです。

PEPは、 sys.hash_info という名前のタプルにフィールドを追加して、現在実行中のバイナリで使用されているハッシュアルゴリズムを記述します。 それ以外の場合、PEPは既存のCPythonAPIを変更しません。


PEP 436:引数クリニック

「引数クリニック」( PEP 436 )はCPythonビルドプロセスの一部になり、実装されたビルトインおよび標準ライブラリ拡張モジュールの正確な署名を定義および維持するプロセスを簡素化するために使用できます。 Cで。

一部の標準ライブラリ拡張モジュールは、Python 3.4で引数クリニックを使用するように変換され、それに応じて pydoc および inspect が更新されました。

プログラムによるイントロスペクションの署名メタデータは、Python3.4メンテナンスリリースの一部としてCに実装された追加の呼び出し可能オブジェクトに追加されることが期待されています。

ノート

Argument Clinic PEPは、実装の状態について完全に最新ではありません。 この場合、引数クリニックはPython 3.4でサードパーティが使用するパブリックAPIとして利用できないため、これはリリースマネージャーとコア開発チームによって受け入れられると見なされています。


も参照してください

PEP 436 –引数クリニックDSL
LarryHastingsによって作成および実装されたPEP。


その他のビルドおよびCAPIの変更

  • 新しい PyType_GetSlot()関数が安定したABIに追加され、制限付きAPIを使用するときに名前付きタイプスロットから関数ポインターを取得できるようになりました。 (:issue: `17162` でMartinvonLöwisによって寄稿されました。)
  • 新しい Py_SetStandardStreamEncoding()事前初期化APIを使用すると、CPythonインタープリターを組み込んだアプリケーションで、標準ストリームの特定のエンコーディングとエラーハンドラーを確実に強制できます。 (:issue: `16129` でBastienMontagneとNickCoghlanによって寄稿されました。)
  • 文字列引数を変更しないほとんどのPythonC APIは、char *ではなくconst char *を受け入れるものとして正しくマークされるようになりました。 (:issue: `1772673` でSerhiyStorchakaによって寄稿されました。)
  • python-configの新しいシェルバージョンは、Pythonインタープリターが利用できない場合でも使用できます(クロスコンパイルシナリオなど)。
  • PyUnicode_FromFormat()は、%s%A%U%V%Sの幅と精度の仕様をサポートするようになりました。 、および%R。 (:issue: `7330` でYsjRayとVictorStinnerによって寄稿されました。)
  • 新しい関数 PyStructSequence_InitType2()は、既存の PyStructSequence_InitType()関数を補完します。 違いは、成功すると0を返し、失敗すると-1を返すことです。
  • CPythonソースは、最近のバージョンのGCCおよびclangのアドレス健全性チェック機能を使用してコンパイルできるようになりました。スモールオブジェクトアロケーターの誤警報は抑制されました。 (:issue: `18596` でDhiruKholiaによって寄稿されました。)
  • Windowsビルドでは、アドレス空間配置のランダム化およびデータ実行防止が使用されるようになりました。 (:issue: `16632` のChristianHeimesによる寄稿。)
  • 新しい関数PyObject_LengthHint()は、 operator.length_hint()と同等のCAPIです。 (:issue: `16148` でArminRonacherによって寄稿されました。)


その他の改善

  • python コマンドには、新しいオプション-Iがあり、「分離モード」で実行されます。つまり、 sys.path スクリプトのディレクトリもユーザーのsite-packagesディレクトリも含まれず、すべての PYTHON*環境変数は無視されます(-sと [X316Xの両方を意味します) ])。 スクリプトの実行をユーザーの環境から分離することを目的として、他の制限も将来適用される可能性があります。 これは、たとえば、Pythonを使用してシステムスクリプトを実行する場合に適しています。 ほとんどのPOSIXシステムでは、システムスクリプトの#!行で使用でき、使用する必要があります。 (:issue: `16499` でChristianHeimesによって寄稿されました。)
  • readline をサポートするシステムの対話型インタープリターで、タブ補完がデフォルトで有効になりました。 履歴もデフォルトで有効になっており、ファイル~/.python-historyに書き込まれます(そしてファイルから読み取られます)。 (:issue: `5845` でAntoinePitrouとÉricAraujoによって寄稿されました。)
  • --versionを使用してPythonインタープリターを呼び出すと、バージョンが標準エラーではなく標準出力に出力されるようになりました(:issue: `18338` )。 argparse:issue: `18920` )およびスクリプトのような呼び出し機能を持つ他のモジュール(:issue:` 18922` )にも同様の変更が加えられました。 。
  • CPython Windowsインストーラーは、拡張機能の登録時に.py PATHEXT変数に追加するようになりました。これにより、ユーザーは名前を入力せずにWindowsコマンドプロンプトでPythonスクリプトを実行できます。 .py拡張機能。 (:issue: `18569` でPaulMooreによって寄稿されました。)
  • 新しいmakeターゲット coverage-report は、Pythonをビルドし、テストスイートを実行し、gcovと lcov [を使用してCコードベースのHTMLカバレッジレポートを生成します。 X171X]。
  • python回帰テストスイート-Rオプションは、 sys.getallocatedblocks()を使用して、メモリ割り当てリークもチェックするようになりました。 (:issue: `13390` のAntoinePitrouによる寄稿。)
  • python -mが名前空間パッケージで機能するようになりました。
  • stat モジュールがCで実装されるようになりました。つまり、以前のようにPythonモジュールに値をハードコーディングする代わりに、Cヘッダーファイルから定数の値を取得します。
  • 単一のOSモジュール(.so.dll)から複数のPythonモジュールをロードすることが正しく機能するようになりました(以前は、ファイル内の最初のPythonモジュールをサイレントに返していました)。 (:issue: `16421` でVáclavŠmilauerによって寄稿されました。)
  • 新しいオペコード:opcode: `LOAD_CLASSDEREF` が追加され、 __ prepare __ の特定の使用によってトリガーされる可能性のあるクラス本体の自由変数のロードのバグが修正されました。 (:issue: `17853` でBenjaminPetersonによって寄稿されました。)
  • 多くのMemoryError関連のクラッシュは、VictorStinnerが PEP 445 ベースのpyfailmallocツール(:issue: `18408` [ X160X]、:issue: `18520` )。
  • pyvenvコマンドは、シンボリックリンクがデフォルトであるシステムでも、シンボリックリンクではなくコピーを使用する--copiesオプションを受け入れるようになりました。 (:issue: `18807` でVinaySajipによって寄稿されました。)
  • pyvenvコマンドは、--without-pipオプションも受け入れて、仮想環境へのpipの自動ブートストラップを抑制します。 ( PEP 453 実装の一部として:issue: `19552` でNickCoghlanによって寄稿されました。)
  • PYTHONIOENCODING 環境変数に設定された値で、エンコード名がオプションになりました。 これにより、デフォルトのエンコーディングを変更せずに、エラーハンドラのみを設定できます。 (:issue: `18818` のSerhiyStorchakaによる寄稿。)
  • bz2lzma 、および gzip モジュールopen関数は、x(排他的作成)モードをサポートするようになりました。 (:issue: `19201`:issue:` 19222` 、および:issue: `19223` でTimHeaneyとVajraskyKokによって寄稿されました。)


重要な最適化

  • UTF-32デコーダーは3倍から4倍高速になりました。 (:issue: `14625` のSerhiyStorchakaによる寄稿。)
  • セットのハッシュ衝突のコストが削減されました。 各ハッシュテーブルプローブは、ハッシュテーブルを介してランダムプローブを作成し続ける前に、一連の連続する隣接するキー/ハッシュペアをチェックするようになりました。 これは、キャッシュの局所性を利用して、衝突解決のコストを削減します。 衝突解決スキームは、線形プロービングとオープンアドレス法のハイブリッドとして説明できます。 追加の線形プローブの数はデフォルトで9になります。 これは、LINEAR_PROBESを任意の値に定義することにより、コンパイル時に変更できます。 LINEAR_PROBES = 0を設定して、線形プロービングを完全にオフにします。 (:issue: `18771` でRaymondHettingerによって寄稿されました。)
  • 通訳は約30 % f asterから始まります。 いくつかの対策がスピードアップにつながります。 インタープリターは、起動時にロードするモジュールの数を減らします。 recollectionslocale モジュールとそれらの依存関係は、デフォルトでインポートされなくなりました。 マーシャルモジュールは、コンパイルされたPythonコードをより高速にロードするように改善されました。 (:issue: `19219`:issue:` 19218`:issue: `19209` のAntoinePitrou、Christian Heimes、VictorStinnerによる寄稿、:issue: `19205` および:issue:` 9548` 。)
  • bz2.BZ2File は、ほとんどの場合、Python2バージョンと同じかそれよりも高速になりました。 lzma.LZMAFile も最適化されています。 (:issue: `16034` でSerhiyStorchakaとNadeemVawdaによって寄稿されました。)
  • random.getrandbits()は、小さい整数の場合(最も一般的な使用例)、20 %-40%高速です。 (:issue: `16674` のSerhiyStorchakaによる寄稿。)
  • 文字列の新しいストレージ形式を利用することで、文字列の酸洗いが大幅に高速化されました。 (:issue: `15596` のVictorStinnerとAntoinePitrouによる寄稿。)
  • io.FileIO.readall()のパフォーマンスの問題が解決されました。 これは特にWindowsに影響し、サブプロセスを介して大量のデータをパイプする場合を大幅に高速化します。 (:issue: `15758` でRichardOudkerkによって寄稿されました。)
  • html.escape()が10倍高速になりました。 (:issue: `18020` でMattBryantによって寄稿されました。)
  • Windowsでは、obmallocのCRT mallocの代わりにネイティブVirtualAllocが使用されるようになりました。 人工ベンチマークは、約3%のメモリ節約を示しています。
  • os.urandom()は、複数のスレッドから並行して実行されるときに多くのファイル記述子を使用しないように、遅延して開かれた永続ファイル記述子を使用するようになりました。 (:issue: `18756` のAntoinePitrouによる寄稿。)


非推奨

このセクションでは、Python 3.4で非推奨になり、Python3.5以降で削除されるさまざまなAPIやその他の機能について説明します。 ほとんどの場合(すべてではありません)、非推奨のAPIを使用すると、非推奨の警告を有効にして(たとえば、-Wdを使用して)インタープリターを実行すると、 DeprecationWarning が生成されます。

PythonAPIの非推奨


非推奨の機能

  • -nフラグ(サブプロセスなし)を指定して IDLE を実行することは非推奨です。 ただし、この機能は:issue: `18823` が解決されるまで削除されません。
  • 「site-python」ディレクトリが存在する場合、sys.pathに追加するサイトモジュールは非推奨になりました(:issue: `19375` )。


NS

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

次のオペレーティングシステムのサポートは、ソースツールとビルドツールから削除されました。


APIと機能の削除

次の廃止され、以前は廃止されたAPIと機能が削除されました。

  • メンテナンスされていないMisc/TextMateおよびMisc/vimディレクトリが削除されました(代わりに使用する方法については、 devguide を参照してください)。
  • SO makefileマクロが削除されました(SHLIB_SUFFIXおよびEXT_SUFFIXマクロに置き換えられました)(:issue: `16754` )。
  • PyThreadState.tick_counterフィールドは削除されました。 その値は、「新しいGIL」が導入されたPython 3.2(:issue: `19199` )以降は意味がありません。
  • PyLoaderPyPycLoaderimportlib から削除されました。 (:issue: `15641` のTarasLyapunによる寄稿。)
  • HTTPConnection および HTTPSConnection に対する strict 引数は削除されました。 HTTP0.9スタイルの「SimpleResponses」はサポートされなくなりました。
  • 非推奨の urllib.request.Request ゲッターおよびセッターメソッドadd_datahas_dataget_dataget_type、 [X121X ]、get_selectorset_proxyget_origin_req_host、およびis_unverifiableは削除されました(代わりに直接属性アクセスを使用してください)。
  • 非推奨のTYPE_INT64のロードのサポートは、 marshal から削除されました。 (:issue: `15480` でDanRitiによって寄稿されました。)
  • inspect.Signature :位置のみのパラメーターに有効な名前を付ける必要があります。
  • object .__ format __()は空でないフォーマット文字列を受け入れなくなり、代わりに TypeError を発生させるようになりました。 空でない文字列の使用は、Python3.2以降非推奨になりました。 この変更は、オブジェクトが__format__メソッドを取得した場合に、以前は機能していた(ただし正しくない)コードが失敗し始める状況を防ぐために行われました。つまり、[を使用している場合、コードで TypeError が発生する可能性があります。 X238X] それを処理する__format__メソッドを持たないオブジェクトを含むフォーマットコード。 背景については、:issue: `7994` を参照してください。
  • difflib.SequenceMatcher.isbjunk()およびdifflib.SequenceMatcher.isbpopular()は3.2で非推奨になり、現在は削除されています。x in sm.bjunkおよびx in sm.bpopularを使用してください。ここで、 sm は[ X127X] SequenceMatcher オブジェクト(:issue: `13248` )。


コードのクリーンアップ

  • 未使用で文書化されていない内部Scannerクラスは、 pydoc モジュールから削除されました。
  • プライベートで効果的に使用されていない_gestaltモジュールは、プライベートプラットフォーム関数_mac_ver_lookup_mac_ver_gstalt、および_bcd2strとともに削除され、これは、ひどく壊れたOSXシステムでのみ呼び出されたはずです(:issue: `18393` を参照)。
  • tarfile モジュール名前空間に含まれていた特定の stat 定数のハードコードされたコピーが削除されました。


Python3.4への移植

このセクションでは、コードの変更が必要になる可能性のある、前述の変更とその他のバグ修正を示します。

'python'コマンドの動作の変更

  • posixシェルでは、 PATH環境変数を空の値に設定することは、まったく設定しないことと同じです。 ただし、 PYTHONPATH を空の値に設定することは、まったく設定しないことと同等ではありませんでした。 PYTHONPATH 空の値に設定することは、.に設定することと同等であり、 PATHの動作と同様に推論すると混乱が生じます。 この動作は、 PATHのposix規則に準拠するようになりました。
  • CPythonインタープリターのデバッグ(--with-pydebug)ビルドの[X refs、Yブロック]出力は、デフォルトでオフになっています。 -X showrefcountオプションを使用して再度有効にすることができます。 (:issue: `17323` のEzioMelottiによる寄稿。)
  • pythonコマンドとほとんどのstdlibスクリプト(および argparse )は、stderrではなくstdout--version情報を出力するようになりました(問題リストについては[X161Xを参照] ]その他の改善上記)。


PythonAPIの変更

  • importlib.abc で定義されたABCは、 NotImplementedError を盲目的に発生させる代わりに、適切な例外を発生させるか、デフォルト値を返すようになりました。 これは、 super()を呼び出し、ABCに至るまでのコードにのみ影響します。 互換性のために、 NotImplementedError または必要に応じて適切な例外の両方をキャッチします。
  • モジュールタイプは、 __ package __ および __ loader __ 属性をデフォルトでNoneに初期化するようになりました。 これらの属性が下位互換性のある方法で設定されているかどうかを判断するには、たとえば、 getattr(module, '__loader__', None) is not None。 (:issue: `17115` 。)
  • importlib.util.module_for_loader()は、__loader____package__を無条件に設定して、リロードを適切にサポートするようになりました。 これが望ましくない場合は、これらの属性を手動で設定する必要があります。 モジュール管理にはimportlib.util.module_to_load()を使用できます。
  • インポートにより、関連する属性がリセットされるようになりました(例: __name____loader____package____file____cached__)を無条件にリロードします。 これにより、再ロード時にモジュールが再検出されるという意味で、3.3より前の動作が復元されることに注意してください(:issue: `19413` )。
  • 凍結されたパッケージは、__path__をパッケージ名を含むリストに設定しなくなり、空のリストに設定するようになりました。 凍結されたパッケージと同じ名前のディレクトリも存在する場合、以前の動作により、インポートシステムがサブモジュールのインポートで間違った処理を行う可能性がありました。 モジュールがパッケージであるかどうかを判断する正しい方法は、hasattr(module, '__path__'):issue: `18065` )を使用することです。
  • 凍結されたモジュールは、__file__属性を定義しなくなりました。 フリーズされたモジュールが明示的な場所からロードされないため、属性を設定することは意味的に正しくありません。 モジュールがフリーズされたコードからのものであることを知る必要がある場合は、モジュールの__spec__.location'frozen'に設定されているかどうかを確認し、ローダーが importlib.machinery.FrozenImporterのサブクラスであるかどうかを確認します。 、またはPython 2との互換性が必要な場合は、imp.is_frozen()を使用できます。
  • py_compile.compile()は、書き込むファイルパスがシンボリックリンクまたは非正規ファイルの場合に FileExistsError を発生させるようになりました。 これは、元々のファイルパスの種類に関係なく、インポートによってこれらのファイルが通常のファイルで上書きされるという警告として機能します。
  • importlib.abc.SourceLoader.get_source()は、ロードされているソースコードが SyntaxError または UnicodeDecodeError をトリガーしたときに ImportError を発生させなくなりました。 ImportError は、ソースコードが見つからない場合にのみ発生することを意図しているため、ソースコードが見つかったが不適切に構造化されている場合、その意味のオーバーリーチ/オーバーロードであると感じられました。 以前にImportErrorをキャッチしていて、構文またはデコードの問題を引き続き無視したい場合は、3つの例外すべてを今すぐキャッチしてください。
  • functools.update_wrapper()および functools.wraps()は、__wrapped__属性を、ラップされている関数に正しく設定するようになりました。その関数にも__wrapped__属性セット。 これは、__wrapped__属性が、最も内側の関数を参照するチェーン内のすべての__wrapped__属性ではなく、装飾された関数のスタックを正しくリンクするようになったことを意味します。 以前の動作が意図的なものであると想定したイントロスペクションライブラリは、 inspect.unwrap()を使用して、__wrapped__属性を持たないチェーンの最初の関数にアクセスできます。
  • inspect.getfullargspec()inspect.signature()の上に再実装されたため、以前よりもはるかに多様な呼び出し可能オブジェクトを処理します。 追加の組み込みおよび拡張モジュールの呼び出し可能オブジェクトは、Python3.4シリーズの過程で署名メタデータを取得することが期待されます。 inspect.getfullargspec()がPython以外の呼び出し可能オブジェクトで失敗することを想定するコードは、それに応じて調整する必要がある場合があります。
  • importlib.machinery.PathFinder は、現在の作業ディレクトリを sys.path_hooks 内の空の文字列のオブジェクトに渡すようになりました。 これにより、 sys.path_importer_cacheが含まれなくなるため、 sys.path に基づいて sys.path_importer_cache を反復処理しても、すべてのキーが検出されるわけではありません。 現在の作業ディレクトリにインポートされたときのモジュールの__file__も、インタープリターで-mを使用する場合を含め、絶対パスを持つようになりました(スクリプトが実行されたときの__main__.__file__を除く)相対パスを直接使用)(:issue: `18416` のBrettCannonによる寄稿)。 コマンドラインで指定されます)(:issue: `18416` )。
  • HTTPConnection および HTTPSConnection への strict 引数の削除は、キーワードではなく位置的に指定している場合、残りの引数の意味を変更します。 非推奨の警告に注意を払っている場合、コードはすでにキーワードを介して追加の引数を指定しているはずです。
  • from __future__ import ...ステートメント間の文字列が常にSyntaxError が発生するようになりました。 以前は、先頭のdocstringがなかった場合、インタースティシャル文字列が無視されることがありました。 これにより、CPythonは言語仕様に準拠します。 JythonとPyPyはすでにそうでした。 (:issue: `17434` )。
  • ssl.SSLSocket.getpeercert()および ssl.SSLSocket.do_handshake()は、 [ AttributeError を発生させる以前の動作の代わりに、X137X]は接続されていません。 さらに、ハンドシェイクがまだ行われていない場合、 getpeercert()ValueError を発生させます。
  • base64.b32decode()は、入力文字列に TypeError ではなく、非b32アルファベット文字が含まれている場合に、 binascii.Error を発生させるようになりました。 この特定の TypeError は、他の TypeError が変換されたときに見落とされていました。 (:issue: `18011` のSerhiyStorchakaによる寄稿。)注:この変更は、Python3.3.3でも誤って適用されました。
  • 作成中のcgi.FieldStorageインスタンスがガベージコレクションされると、file属性が自動的に閉じられるようになりました。 cgi.FieldStorageインスタンスとは別にファイルオブジェクトを引き出し、インスタンスを存続させない場合は、cgi.FieldStorageインスタンス全体を保存するか、cgi.FieldStorageインスタンスはガベージコレクションです。
  • 閉じたSSLソケットでreadまたはwriteを呼び出すと、以前のより不思議な AttributeError:issue: `9177` )。
  • ママ.indices()は、巨大な値に対してオーバーフローエラーを生成しなくなりました。 この修正の結果として、ママ.indices()は、負の長さが与えられた場合に ValueError を発生させるようになりました。 以前はナンセンス値を返していました(:issue: `14794` )。
  • complex コンストラクターは、 cmath 関数とは異なり、オブジェクトの__complex__特殊メソッドが値を返した場合、 float 値を誤って受け入れていました。 これにより、 TypeError が発生します。 (:issue: `16290` 。)
  • 3.2および3.3の int コンストラクターは、 base パラメーターの float 値を誤って受け入れます。 誰もがこれを行っていた可能性は低いですが、そうであれば、 TypeError:issue: `16772` )が発生します。
  • キーワードのみの引数のデフォルトは、前ではなく、通常のキーワード引数ののデフォルトで評価されるようになりました。 以前のバグのある動作(:issue: `16967` )に依存するコードを書いた人がいないことを願っています。
  • fork()の後で、古いスレッドの状態がクリアされるようになりました。 これにより、以前は誤って永続的に存続していた一部のシステムリソースが解放される可能性があります(たとえば、データベース接続はスレッドローカルストレージに保持されます)。 (:issue: `17094` 。)
  • __annotations__ dictのパラメーター名は、__kwdefaults__と同様に、正しくマングルされるようになりました。 (:issue: `20625` でYurySelivanovによって寄稿されました。)
  • hashlib.hash.name は、常に小文字の識別子を返すようになりました。 以前は一部の組み込みハッシュに大文字の名前が付いていましたが、正式なパブリックインターフェイスになったため、名前の一貫性が保たれました(:issue: `18532` )。
  • unittest.TestSuite は実行後にテストへの参照を削除するようになったため、 TestSuite を再利用して一連のテストを再実行するテストハーネスは失敗する可能性があります。 unittest が提供するように設計されているテスト分離を破り、テスト実行間で状態が保持されることを意味するため、テストスイートをこの方法で再利用しないでください。 ただし、分離の欠如が許容できると考えられる場合は、何もしない_removeTestAtIndexメソッドを定義する TestSuite サブクラスを作成することで、古い動作を復元できます( TestSuite .__ iter __(を参照) ))(:issue: `11798` )。
  • unittest は、コマンドライン解析に argparse を使用するようになりました。 以前は機能していた無効なコマンドフォームがあり、現在は許可されていません。 理論的には、許可されていないコマンドフォームは意味をなさず、使用される可能性が低いため、これによって下位互換性の問題が発生することはありません。
  • re.split()re.findall()re.sub()関数、およびgroup()と[X103X matchオブジェクトの] メソッドは、一致する文字列がバイトのようなオブジェクトの場合、常にバイトオブジェクトを返すようになりました。 以前は、戻り型が入力型と一致していたため、コードが戻り値に依存していた場合、たとえばbytearrayの場合は、コードを変更する必要があります。
  • audioop 関数は、文字列入力が渡された場合、後でランダムに失敗するのではなく、すぐにエラーを発生させるようになりました(:issue: `16685` )。
  • HTMLParser への新しい convert_charrefs 引数は、下位互換性のために現在デフォルトでFalseになっていますが、最終的にはデフォルトでTrueに変更されます。 コード内の HTMLParser 呼び出し(:issue: `13633` )には、このキーワードを適切な値で追加することをお勧めします。
  • hmac.new()関数の digestmod 引数には将来デフォルトがなくなるため、 hmac.new()へのすべての呼び出しを次のように変更する必要があります。 digestmod:issue: `17276` )を明示的に指定します。
  • SOキーを使用して sysconfig.get_config_var()を呼び出すか、 sysconfig.get_config_vars()の呼び出し結果でSOを検索します。非推奨。 このキーは、コンテキストに応じてEXT_SUFFIXまたはSHLIB_SUFFIXに置き換える必要があります(:issue: `19555` )。
  • Uを指定するopen関数の呼び出しはすべて変更する必要があります。 UはPython3では無効であり、使用すると最終的にエラーが発生します。 関数に応じて、 newline 引数を使用するか、必要に応じてストリームを TextIOWrapper でラップして、 newline [を使用することにより、古いPython2の動作と同等の動作を実現できます。 X215X]引数(:issue: `15204` )。
  • スクリプトでpyvenvを使用していて、pip ではなくをインストールしたい場合は、コマンド呼び出しに--without-pipを追加する必要があります。
  • インデントが指定されている場合の json.dump()および json.dumps()のデフォルトの動作が変更されました。行。 これは、そのような出力の空白に敏感な比較を行うテストがある場合にのみ問題になります(:issue: `16333` )。
  • doctest は、拡張モジュール__doc__文字列でdoctestを検索するようになりました。そのため、doctestテスト検出に、doctestのように見える拡張モジュールが含まれている場合、これまでにないテストの失敗が発生する可能性があります。テストを実行する前(:issue: `3158` )。
  • collections.abc モジュールは、Pythonスタートアップの改善の一環として、わずかにリファクタリングされています。 この結果、 collections をインポートすると collections.abc が自動的にインポートされることはなくなりました。 プログラムが(文書化されていない)暗黙的なインポートに依存している場合は、明示的なimport collections.abc:issue: `20784` )を追加する必要があります。


CAPIの変更

  • PyEval_EvalFrameEx()PyObject_Repr()、および PyObject_Str()は、他のいくつかの内部C APIとともに、それらが使用されないことを保証するデバッグアサーションを含むようになりました。現在アクティブな例外をサイレントに破棄する可能性がある状況。 アクティブな例外の破棄が予想され、必要な場合(たとえば、 PyErr_Fetch()でローカルにすでに保存されているか、意図的に別の例外に置き換えられているため)、明示的な PyErr_Clear( )呼び出しは、これらの操作を(直接的または間接的に)呼び出し、アサーションが有効になっているバージョンのPythonに対して実行するときに、アサーションがトリガーされないようにするために必要になります。
  • PyErr_SetImportError()は、 msg 引数が設定されていない場合に、 TypeError を設定するようになりました。 以前は、NULLのみが返され、例外は設定されていませんでした。
  • PyOS_ReadlineFunctionPointer コールバックの結果は、 PyMem_RawMalloc()または PyMem_RawRealloc()、またはエラーが発生した場合はNULLによって割り当てられた文字列である必要があります。 、 PyMem_Malloc()または PyMem_Realloc():issue: `16742` )によって割り当てられた文字列の代わりに
  • PyThread_set_key_value()は常に値を設定するようになりました。 Python 3.3では、キーがすでに存在する場合(現在の値がNULL以外のポインターである場合)、関数は何もしませんでした。
  • PyFrameObject 構造のf_tstate(スレッド状態)フィールドは、バグを修正するために削除されました。理由については、:issue: `14432` を参照してください。


3.4.3で変更

PEP 476:stdlibhttpクライアントの証明書検証をデフォルトで有効にする

http.client とそれを使用するモジュール( urllib.requestxmlrpc.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)