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

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

Python3.5の新機能

編集者
Elvis Pranskevichus < [email protected] >、ユーリー・セリバノフ< [email protected] >>

この記事では、3.4と比較したPython3.5の新機能について説明します。 Python3.5は2015年9月13日にリリースされました。  変更の完全なリストについては、 changelog を参照してください。

も参照してください

PEP 478 -Python3.5のリリーススケジュール


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

新しい構文機能:

  • PEP 492 、非同期および待機構文のコルーチン。
  • PEP 465 、新しい行列乗算演算子:a @ b
  • PEP 448 、追加のアンパックの一般化。

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

新しい組み込み機能:

  • bytes % argsbytearray % argsPEP 461 –バイトおよびバイト配列に%フォーマットを追加します。
  • 新しい bytes.hex()bytearray.hex()および memoryview.hex()メソッド。 (:issue: `9951` でArnonYaariによって寄稿されました。)
  • memoryview は、タプルインデックス(多次元を含む)をサポートするようになりました。 (:issue: `23632` のAntoinePitrouによる寄稿。)
  • ジェネレーターには新しいgi_yieldfrom属性があり、yield from式によって繰り返されるオブジェクトを返します。 (:issue: `24450` でBennoLeslieとYurySelivanovによって寄稿されました。)
  • 最大再帰深度に達すると、新しい RecursionError 例外が発生するようになりました。 (:issue: `19235` でGeorgBrandlによって寄稿されました。)

CPython実装の改善:

  • LC_TYPEロケールがPOSIXロケール(Cロケール)の場合、 sys.stdin および sys.stdoutsurrogateescapeを使用するようになりました。 ] strictエラーハンドラの代わりに、エラーハンドラ。 (:issue: `19977` でVictorStinnerによって寄稿されました。)
  • .pyoファイルは使用されなくなり、.pyc名に明示的に最適化レベルを含むより柔軟なスキームに置き換えられました。 ( PEP 488の概要を参照してください。)
  • 組み込みモジュールと拡張モジュールは、Pythonモジュールのロード方法と同様に、マルチフェーズプロセスで初期化されるようになりました。 ( PEP 489の概要を参照してください。)

標準ライブラリの大幅な改善:

セキュリティの改善:

  • SSLv3は、標準ライブラリ全体で無効になりました。 ssl.SSLContext を手動でインスタンス化することで引き続き有効にできます。 (詳細については、:issue: `22638` を参照してください。この変更は、CPython 3.4および2.7にバックポートされました。)
  • 潜在的なインジェクション攻撃から保護するために、HTTPCookieの解析がより厳密になりました。 (:issue: `22796` のAntoinePitrouによる寄稿。)

Windowsの改善:

  • Windows用の新しいインストーラーが古いMSIに取って代わりました。 詳細については、 WindowsでのPythonの使用を参照してください。
  • WindowsビルドはMicrosoftVisual C ++ 14.0を使用するようになり、拡張モジュールも同じものを使用する必要があります。

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


新機能

PEP492-非同期および待機構文のコルーチン

PEP 492 は、待機可能オブジェクトコルーチン関数非同期反復を追加することにより、Pythonでの非同期プログラミングのサポートを大幅に改善します。 、および非同期コンテキストマネージャー

コルーチン関数は、新しい async def 構文を使用して宣言されます。

>>> async def coro():
...     return 'spam'

コルーチン関数内では、新しい await 式を使用して、結果が利用可能になるまでコルーチンの実行を一時停止できます。 __await__()メソッドを定義して awaitable プロトコルを実装している限り、どのオブジェクトも awaitable にすることができます。

PEP 492は、 async for ステートメントも追加して、非同期反復可能オブジェクトを簡単に反復できるようにします。

新しい構文を使用して記述された基本的なHTTPクライアントの例:

import asyncio

async def http_get(domain):
    reader, writer = await asyncio.open_connection(domain, 80)

    writer.write(b'\r\n'.join([
        b'GET / HTTP/1.1',
        b'Host: %b' % domain.encode('latin-1'),
        b'Connection: close',
        b'', b''
    ]))

    async for line in reader:
        print('>>>', line)

    writer.close()

loop = asyncio.get_event_loop()
try:
    loop.run_until_complete(http_get('example.com'))
finally:
    loop.close()

非同期反復と同様に、非同期コンテキストマネージャーの新しい構文があります。 次のスクリプト:

import asyncio

async def coro(name, lock):
    print('coro {}: waiting for lock'.format(name))
    async with lock:
        print('coro {}: holding the lock'.format(name))
        await asyncio.sleep(1)
        print('coro {}: releasing the lock'.format(name))

loop = asyncio.get_event_loop()
lock = asyncio.Lock()
coros = asyncio.gather(coro(1, lock), coro(2, lock))
try:
    loop.run_until_complete(coros)
finally:
    loop.close()

出力します:

coro 2: waiting for lock
coro 2: holding the lock
coro 1: waiting for lock
coro 2: releasing the lock
coro 1: holding the lock
coro 1: releasing the lock

async forasync with はどちらも、 async def で宣言されたコルーチン関数内でのみ使用できることに注意してください。

コルーチン関数は、 asyncioループなどの互換性のあるイベントループ内で実行することを目的としています。

ノート

バージョン3.5.2で変更: CPython 3.5.2以降、__aiter__非同期イテレーターを直接返すことができます。 awaitable オブジェクトを返すと、 PendingDeprecationWarning になります。

詳細については、非同期イテレータのドキュメントセクションを参照してください。


も参照してください

PEP 492 –非同期および待機構文のコルーチン
Yury Selivanovによって作成および実装されたPEP。


PEP465-行列乗算専用のインフィックス演算子

PEP 465 は、行列乗算用の@中置演算子を追加します。 現在、組み込みのPython型は新しい演算子を実装していませんが、通常、反映、およびインプレース行列に対して__matmul__()__rmatmul__()、および__imatmul__()を定義することで実装できます。乗算。 これらのメソッドのセマンティクスは、他の中置算術演算子を定義するメソッドのセマンティクスと似ています。

行列の乗算は、数学、科学、工学の多くの分野で特に一般的な演算であり、@を追加すると、よりクリーンなコードを記述できます。

S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)

それ以外の:

S = dot((dot(H, beta) - r).T,
        dot(inv(dot(dot(H, V), H.T)), dot(H, beta) - r))

NumPy 1.10は、新しい演算子をサポートしています。

>>> import numpy

>>> x = numpy.ones(3)
>>> x
array([ 1., 1., 1.])

>>> m = numpy.eye(3)
>>> m
array([[ 1., 0., 0.],
       [ 0., 1., 0.],
       [ 0., 0., 1.]])

>>> x @ m
array([ 1., 1., 1.])

も参照してください

PEP 465 –行列乗算専用のインフィックス演算子
ナサニエルJによって書かれたPEP。 スミス; ベンジャミンピーターソンによって実装されました。


PEP448-追加の開梱の一般化

PEP 448 は、*反復可能解凍演算子と**辞書解凍演算子の許可された使用法を拡張します。 関数呼び出しで任意の数のアンパックを使用できるようになりました。

>>> print(*[1], *[2], 3, *[4, 5])
1 2 3 4 5

>>> def fn(a, b, c, d):
...     print(a, b, c, d)
...

>>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4})
1 2 3 4

同様に、タプル、リスト、セット、および辞書の表示では、複数の解凍が可能です(式リストおよび辞書表示を参照)。

>>> *range(4), 4
(0, 1, 2, 3, 4)

>>> [*range(4), 4]
[0, 1, 2, 3, 4]

>>> {*range(4), 4, *(5, 6, 7)}
{0, 1, 2, 3, 4, 5, 6, 7}

>>> {'x': 1, **{'y': 2}}
{'x': 1, 'y': 2}

も参照してください

PEP 448 –追加の開梱の一般化
JoshuaLandauによって書かれたPEP。 Neil Girdhar、Thomas Wouters、およびJoshuaLandauによって実装されました。


PEP461-バイトおよびbytearrayのパーセントフォーマットサポート

PEP 461 は、% 補間演算子のサポートをバイトおよびバイトアレイに追加します。

補間は通常文字列演算と考えられていますが、bytesまたはbytearraysでの補間が理にかなっている場合があり、この欠落している機能を補うために必要な作業により、コード。 この問題は、バイナリとASCII互換のテキストが混在することが多いワイヤフォーマットプロトコルを扱う場合に特に重要です。

例:

>>> b'Hello %b!' % b'World'
b'Hello World!'

>>> b'x=%i y=%f' % (1, 2.5)
b'x=1 y=2.500000'

Unicodeは%bには使用できませんが、%arepr(obj).encode('ascii', 'backslashreplace')と同等)では使用できます。

>>> b'Hello %b!' % 'World'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %b requires bytes, or an object that implements __bytes__, not 'str'

>>> b'price: %a' % '10€'
b"price: '10\\u20ac'"

%sおよび%r変換タイプはサポートされていますが、Python2との互換性が必要なコードベースでのみ使用する必要があることに注意してください。

も参照してください

PEP 461 –バイトおよびバイト配列に% f ormattingを追加
イーサンファーマンによって書かれたPEP; NeilSchemenauerとEthanFurmanによって実装されました。


PEP484-タイプのヒント

関数アノテーション構文はバージョン3.0( PEP 3107 )以降Pythonの機能ですが、アノテーションのセマンティクスは未定義のままです。

経験によれば、関数アノテーションの使用の大部分は、関数パラメーターと戻り値に型ヒントを提供することでした。 標準ライブラリに型注釈の基本定義とツールが含まれていれば、Pythonユーザーにとって有益であることが明らかになりました。

PEP 484 は、暫定モジュールを導入して、これらの標準定義とツールを提供し、注釈が利用できない状況でのいくつかの規則を提供します。

たとえば、引数と戻り値の型がアノテーションで宣言されている単純な関数を次に示します。

def greeting(name: str) -> str:
    return 'Hello ' + name

これらの注釈は、通常の__annotations__属性を介して実行時に使用できますが、実行時に自動型チェックは行われません。 代わりに、別のオフラインタイプチェッカー(例: mypy )は、オンデマンドのソースコード分析に使用されます。

型システムは、ユニオン、ジェネリック型、および Any という名前の特別な型をサポートします。 すべてのタイプとの間で割り当て可能)。

も参照してください

  • タイピングモジュールのドキュメント
  • *; PEP 484 –タイプのヒント
    Guido van Rossum、Jukka Lehtosalo、およびŁukaszLangaによって書かれたPEP。 グイドヴァンロッサムによって実装されました。
  • *; PEP 483 –型ヒントの理論
    グイドヴァンロッサムによって書かれたPEP


PEP 471-os.scandir()関数–より優れたより高速なディレクトリイテレータ

PEP 471 は、新しいディレクトリ反復関数 os.scandir()を標準ライブラリに追加します。 さらに、 os.walk()scandirを使用して実装されるようになりました。これにより、POSIXシステムでは3〜5倍、Windowsシステムでは7〜20倍高速になります。 これは主に、ディレクトリツリーをウォークするために必要な os.stat()への呼び出しの数を大幅に減らすことによって達成されます。

さらに、scandirは、ファイル名のリストを返すのではなく、イテレータを返します。これにより、非常に大きなディレクトリを反復処理するときのメモリ効率が向上します。

次の例は、 os.scandir()を使用して、'.'で始まらない特定のパス内のすべてのファイル(ディレクトリを除く)を表示する簡単な使用法を示しています。 。 entry.is_file()呼び出しは、通常、追加のシステムコールを行いません。

for entry in os.scandir(path):
    if not entry.name.startswith('.') and entry.is_file():
        print(entry.name)

も参照してください

PEP 471 – os.scandir()関数–より優れたより高速なディレクトリイテレータ
ビクター・スティンナーの助けを借りてベン・ホイトによって書かれ、実装されたPEP。


PEP 475:EINTRで失敗したシステムコールの再試行

errno.EINTR エラーコードは、I / Oを待機しているシステムコールがシグナルによって中断されるたびに返されます。 以前は、Pythonはそのような場合に InterruptedError を発生させていました。 つまり、Pythonアプリケーションを作成するとき、開発者には2つの選択肢がありました。

  1. InterruptedErrorは無視してください。
  2. InterruptedErrorを処理し、すべてのコールサイトで中断されたシステムコールの再開を試みます。

最初のオプションでは、アプリケーションが断続的に失敗します。 2番目のオプションは、コードをほとんど読めないようにする大量の定型文を追加します。 比較:

print("Hello World")

と:

while True:
    try:
        print("Hello World")
        break
    except InterruptedError:
        continue

PEP 475 は、EINTRでシステムコールの自動再試行を実装します。 これにより、ほとんどの状況でユーザーコードのEINTRまたは InterruptedError を処理する負担がなくなり、標準ライブラリを含むPythonプログラムがより堅牢になります。 システムコールは、シグナルハンドラが例外を発生させない場合にのみ再試行されることに注意してください。

以下は、シグナルによって中断されたときに再試行される関数のリストです。

も参照してください

PEP 475 –EINTRで失敗したシステムコールの再試行
Charles-FrançoisNataliとVictorStinnerが、Antoine Pitrou(フランスのつながり)の助けを借りて作成したPEPと実装。


PEP 479:ジェネレーター内のStopIteration処理を変更

Python3.4以前のジェネレーターと StopIteration の相互作用は、驚くべき場合があり、あいまいなバグを隠すことができました。 以前は、ジェネレーター関数内で誤って発生したStopIterationは、ジェネレーターを駆動するループ構造によって反復の終了として解釈されていました。

PEP 479 は、ジェネレーターの動作を変更します。ジェネレーター内でStopIteration例外が発生すると、終了する前に RuntimeError に置き換えられます。ジェネレーターフレーム。 この変更の主な目的は、保護されていない next()呼び出しがStopIterationを発生させ、ジェネレーターによって制御される反復をサイレントに終了させる状況でのデバッグを容易にすることです。 これは、yield fromコンストラクトと組み合わせると特に有害です。

これは後方互換性のない変更であるため、新しい動作を有効にするには、 __ future __ インポートが必要です。

>>> from __future__ import generator_stop

>>> def gen():
...     next(iter([]))
...     yield
...
>>> next(gen())
Traceback (most recent call last):
  File "<stdin>", line 2, in gen
StopIteration

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

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: generator raised StopIteration

__future__インポートがないと、ジェネレーター内で StopIteration 例外が発生するたびに、 PendingDeprecationWarning が発生します。

も参照してください

PEP 479 –ジェネレーター内のStopIteration処理を変更
クリスアンジェリコとグイドヴァンロッサムによって書かれたPEP。 Chris Angelico、Yury Selivanov、NickCoghlanによって実装されました。


PEP 485:近似等式をテストするための関数

PEP 485 は、 math.isclose()および cmath.isclose()関数を追加して、2つの値がほぼ等しいか「互いに近い」。 2つの値が近いと見なされるかどうかは、指定された絶対公差と相対公差に従って決定されます。 相対許容誤差は、isclose引数間で許容される最大の差であり、絶対値が大きい方を基準にしています。

>>> import math
>>> a = 5.0
>>> b = 4.99998
>>> math.isclose(a, b, rel_tol=1e-5)
True
>>> math.isclose(a, b, rel_tol=1e-6)
False

絶対許容値を使用して2つの値を比較することもできます。これは、負でない値である必要があります。

>>> import math
>>> a = 5.0
>>> b = 4.99998
>>> math.isclose(a, b, abs_tol=0.00003)
True
>>> math.isclose(a, b, abs_tol=0.00001)
False

も参照してください

PEP 485 –近似等式をテストするための関数
クリストファーバーカーによって書かれたPEP; ChrisBarkerとTalEinatによって実装されました。


PEP 486:PythonLauncherに仮想環境を認識させる

PEP 486 は、Windowsランチャー( PEP 397 を参照)にアクティブな仮想環境を認識させます。 デフォルトのインタープリターが使用され、VIRTUAL_ENV環境変数が設定されている場合、仮想環境のインタープリターが使用されます。

も参照してください

PEP 486 – PythonLauncherに仮想環境を認識させる
PEPは、PaulMooreによって作成および実装されました。


PEP 488:PYOファイルの削除

PEP 488 は、.pyoファイルの概念を廃止します。 これは、.pycファイルが最適化されていないバイトコードと最適化されたバイトコードの両方を表すことを意味します。 バイトコードファイルを絶えず再生成する必要をなくすために、.pycファイルの名前には、バイトコードが最適化されたときにオプションのopt-タグが含まれるようになりました。 これには、 -O または -OO のいずれかで実行しているときに、バイトコードファイル名が衝突しなくなるという副作用があります。 その結果、 -O-OO から生成されたバイトコードファイルが同時に存在する可能性があります。 importlib.util.cache_from_source()には、この変更に役立つ更新されたAPIがあります。

も参照してください

PEP 488 –PYOファイルの削除
BrettCannonによって作成および実装されたPEP。


PEP 489:マルチフェーズ拡張モジュールの初期化

PEP 489 は、拡張モジュールの初期化を更新して、Python3.4の PEP 451 によって導入された2ステップのモジュール読み込みメカニズムを利用します。

この変更により、新しいメカニズムの使用をオプトインする拡張モジュールのインポートセマンティクスが、ASCIIに制限されるのではなく、モジュール名として有効な識別子を使用する機能など、Pythonソースおよびバイトコードモジュールのインポートセマンティクスにはるかに近くなります。

も参照してください

PEP 489 –多相拡張モジュールの初期化
Petr Viktorin、Stefan Behnel、およびNickCoghlanによって作成されたPEP。 PetrViktorinによって実装されました。


その他の言語の変更

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

  • "namereplace"エラーハンドラーを追加しました。 "backslashreplace"エラーハンドラーは、デコードと変換で機能するようになりました。 (:issue: `19676` および:issue:` 22286` でSerhiyStorchakaによって寄稿されました。)
  • -b オプションは、 bytesint の比較に影響するようになりました。 (:issue: `23681` のSerhiyStorchakaによる寄稿。)
  • 新しいカザフ語kz1048とタジク語koi8_t コーデック。 (:issue: `22682` および:issue:` 22681` でSerhiyStorchakaによって寄稿されました。)
  • プロパティのdocstringが書き込み可能になりました。 これは、 collections.namedtuple() docstringに特に役立ちます。 (:issue: `24064` のBerkerPeksagによる寄稿。)
  • 相対インポートを含む循環インポートがサポートされるようになりました。 (:issue: `17636` のBrettCannonとAntoinePitrouによる寄稿。)


新しいモジュール

タイピング

新しいタイピング 暫定モジュールは、関数型注釈の標準定義とツールを提供します。 詳細については、タイプヒントを参照してください。


zipapp

新しい zipapp モジュール( PEP 441 で指定)は、Python2.6で[ X198X]:issue: `1739468` ですが、当時もそれ以降もあまり公表されていませんでした。

新しいモジュールを使用すると、アプリケーションのバンドルは、__main__.pyファイルを含むすべてのファイルをディレクトリmyappに入れて実行するのと同じくらい簡単です。

$ python -m zipapp myapp
$ python myapp.pyz

モジュールの実装は、Paul Mooreによって:issue: `23491` で提供されています。

も参照してください

PEP 441 – PythonZIPアプリケーションサポートの改善


改善されたモジュール

argparse

ArgumentParser クラスでは、 allow_abbrevFalseに設定することにより、長いオプションの省略使用を無効にできるようになりました。 (:issue: `14910` で、Jonathan Paugh、Steven Bethard、paul j3、Daniel Erikssonによって寄稿されました。)


asyncio

asyncio モジュールは provisional であるため、Python3.5で導入されたすべての変更もPython3.4.xにバックポートされています。

Python 3.4.0以降の asyncio モジュールの注目すべき変更点:

  • 新しいデバッグAPI: loop.set_debug()および loop.get_debug()メソッド。 (Victor Stinnerによる寄稿。)
  • proactorイベントループがSSLをサポートするようになりました。 (:issue: `22560` でAntoinePitrouとVictorStinnerによって寄稿されました。)
  • イベントループが閉じているかどうかを確認するための新しい loop.is_closed()メソッド。 (:issue: `21326` でVictorStinnerによって寄稿されました。)
  • コルーチンの新しいタスクを便利に作成およびスケジュールするための新しい loop.create_task()create_taskメソッドは、asyncio.wait()asyncio.gather()など、コルーチンをタスクにラップするすべての非同期関数でも使用されます。 (Victor Stinnerによる寄稿。)
  • フロー制御の高-および低-水制限を照会するための新しい transport.get_write_buffer_limits()メソッド。 (Victor Stinnerによる寄稿。)
  • async()関数は非推奨になり、 sure_future()が優先されます。 (Yury Selivanovによる寄稿。)
  • loop.set_task_factory()および loop.get_task_factory()メソッドを使用して、 loop.create_task()メソッドが使用するタスクファクトリをカスタマイズします。 (Yury Selivanovによる寄稿。)
  • 新しいQueue.join()および Queue.task_done()キューメソッド。 (Victor Stinnerによる寄稿。)
  • JoinableQueueクラスが削除され、 asyncio.Queue クラスが優先されました。 (Victor Stinnerによる寄稿。)

3.5.1での更新:

  • sure_future()関数と、それを使用する loop.run_until_complete()などのすべての関数は、すべての種類の待機可能オブジェクトを受け入れるようになりました。 (Yury Selivanovによる寄稿。)
  • 他のスレッドからのイベントループにコルーチンを送信するための新しい run_coroutine_threadsafe()関数。 (Vincent Michelによる寄稿。)
  • トランスポートが閉じているか閉じているかを確認するための新しい Transport.is_closeing()メソッド。 (Yury Selivanovによる寄稿。)
  • loop.create_server()メソッドは、ホストのリストを受け入れることができるようになりました。 (Yann Sionneauによる寄稿。)

3.5.2での更新:

  • Futureオブジェクトを作成するための新しい loop.create_future()メソッド。 これにより、 uvloop などの代替イベントループ実装が、より高速な asyncio.Future 実装を提供できるようになります。 (Yury Selivanovによる寄稿。)
  • 現在の例外ハンドラーを取得するための新しい loop.get_exception_handler()メソッド。 (Yury Selivanovによる寄稿。)
  • セパレータバイトシーケンスが表示されるまでストリームからデータを読み取る新しいStreamReader.readuntil()メソッド。 (Mark Korenbergによる寄稿。)
  • loop.create_connection()およびloop.create_server()メソッドは、アドレスがすでに解決されている場合にシステムgetaddrinfo関数を呼び出さないように最適化されています。 (Aによる寄稿。 ジェシー・ジリュウ・デイビス。)
  • loop.sock_connect(sock, address)では、呼び出し前にアドレスを解決する必要がなくなりました。 (Aによる寄稿。 ジェシー・ジリュウ・デイビス。)


bz2

BZ2Decompressor.decompress メソッドは、オプションの max_length 引数を受け入れて、解凍されたデータの最大サイズを制限するようになりました。 (:issue: `15955` のNikolausRathによる寄稿。)


cgi

FieldStorageクラスは、コンテキストマネージャープロトコルをサポートするようになりました。 (:issue: `20289` のBerkerPeksagによる寄稿。)


cmath

新しい関数 isclose()は、近似的な同等性をテストする方法を提供します。 (:issue: `24270` でChrisBarkerとTalEinatによって寄稿されました。)


コード

InteractiveInterpreter.showtraceback()メソッドは、インタラクティブインタープリターと同じように、完全にチェーンされたトレースバックを出力するようになりました。 (:issue: `17442` のClaudiuPopaによる寄稿。)


コレクション

OrderedDict クラスがCで実装されるようになり、4〜100倍高速になりました。 (:issue: `16991` のEricSnowによる寄稿。)

OrderedDict.items()OrderedDict.keys()OrderedDict.values()ビューは、 reverse()反復をサポートするようになりました。 (:issue: `19505` のSerhiyStorchakaによる寄稿。)

deque クラスは、 index()insert()、および copy()を定義し、+をサポートするようになりました。 ]および*演算子。 これにより、両端キューが MutableSequence として認識され、リストの代替可能性が向上します。 (:issue: `23704` でRaymondHettingerによって寄稿されました。)

namedtuple()によって生成されたDocstringを更新できるようになりました。

Point = namedtuple('Point', ['x', 'y'])
Point.__doc__ += ': Cartesian coodinate'
Point.x.__doc__ = 'abscissa'
Point.y.__doc__ = 'ordinate'

:issue: `24064` のBerkerPeksagによる寄稿。)

UserString クラスは、__getnewargs__()__rmod__()casefold()format_map()isprintableを実装するようになりました。 ()、および maketrans()メソッドは、 str の対応するメソッドと一致します。 (:issue: `22189` でJoeJevnikによって寄稿されました。)


collections.abc

Sequence.index()メソッドは、 start および stop 引数を受け入れて、 tuplelist などの対応するメソッドと一致するようになりました。 (:issue: `23086` でDevinJeanpierreによって寄稿されました。)

新しい Generator 抽象基本クラス。 (:issue: `24018` でStefanBehnelによって寄稿されました。)

新しい AwaitableCoroutineAsyncIterator 、および AsyncIterable 抽象基本クラス。 (:issue: `24184` でYurySelivanovによって寄稿されました。)

以前のPythonバージョンでは、新しいABCのバックポートが外部 PyPIパッケージで利用できます。


compileall

新しい compileall オプション-j Nを使用すると、 N ワーカーを同時に実行して並列バイトコードコンパイルを実行できます。 compile_dir()関数には、対応するworkersパラメーターがあります。 (:issue: `16104` のClaudiuPopaによる寄稿。)

もう1つの新しいオプション-rを使用すると、サブディレクトリの最大再帰レベルを制御できます。 (:issue: `19628` でClaudiuPopaによって寄稿されました。)

-qコマンドラインオプションを複数回指定できるようになりました。この場合、エラーを含むすべての出力が抑制されます。 compile_dir()compile_file()、および compile_path()の対応するquietパラメーターは、のレベルを示す整数値を受け入れることができるようになりました。出力抑制。 (:issue: `21338` でThomasKluyverによって寄稿されました。)


コンカレント.futures

Executor.map()メソッドが chunksize 引数を受け入れるようになり、 ProcessPoolExecutor()が使用されている場合に、タスクのバッチ処理によってパフォーマンスが向上します。 (:issue: `11271` でDanO'Reillyによって寄稿されました。)

ThreadPoolExecutor コンストラクターのワーカー数はオプションになりました。 デフォルト値はCPU数の5倍です。 (:issue: `21527` のClaudiuPopaによる寄稿。)


configparser

configparser は、 ConfigParser コンストラクターでコンバーターのディクショナリを指定するか、ConfigParserサブクラスでメソッドとして定義することにより、値の変換をカスタマイズする方法を提供するようになりました。 パーサーインスタンスで定義されたコンバーターは、そのセクションプロキシによって継承されます。

例:

>>> import configparser
>>> conv = {}
>>> conv['list'] = lambda v: [e.strip() for e in v.split() if e.strip()]
>>> cfg = configparser.ConfigParser(converters=conv)
>>> cfg.read_string("""
... [s]
... list = a b c d e f g
... """)
>>> cfg.get('s', 'list')
'a b c d e f g'
>>> cfg.getlist('s', 'list')
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> section = cfg['s']
>>> section.getlist('list')
['a', 'b', 'c', 'd', 'e', 'f', 'g']

:issue: `18159` のŁukaszLangaによる寄稿。)


contextlib

新しい redirect_stderr() context managerredirect_stdout()と同様)により、ユーティリティスクリプトが出力をに書き込む柔軟性のないAPIを簡単に処理できるようになります。 sys.stderr であり、リダイレクトするオプションを提供していません。

>>> import contextlib, io, logging
>>> f = io.StringIO()
>>> with contextlib.redirect_stderr(f):
...     logging.warning('warning')
...
>>> f.getvalue()
'WARNING:root:warning\n'

:issue: `22389` のBerkerPeksagによる寄稿。)


csv

writerow()メソッドは、シーケンスだけでなく、任意の反復可能オブジェクトをサポートするようになりました。 (:issue: `23171` のSerhiyStorchakaによる寄稿。)


のろい

新しい update_lines_cols()関数は、 LINESおよび COLS環境変数を更新します。 これは、手動の画面サイズ変更を検出するのに役立ちます。 (:issue: `4254` でArnonYaariによって寄稿されました。)


dbm

dumb.open は、フラグの値が"n"の場合、常に新しいデータベースを作成します。 (:issue: `18039` でClaudiuPopaによって寄稿されました。)


difflib

HtmlDiff.make_file()によって生成されたHTMLドキュメントの文字セットは、新しい charset キーワードのみの引数を使用してカスタマイズできるようになりました。 HTMLドキュメントのデフォルトの文字セットが"ISO-8859-1"から"utf-8"に変更されました。 (:issue: `2052` のBerkerPeksagによる寄稿。)

diff_bytes()関数は、バイト文字列のリストを比較できるようになりました。 これにより、Python2からのリグレッションが修正されます。 (TerryJによる寄稿。 のReedyとGregWard:issue: `17445` 。)


distutils

buildコマンドとbuild_extコマンドの両方で、-jオプションを受け入れて、拡張モジュールの並列構築を有効にするようになりました。 (:issue: `5309` のAntoinePitrouによる寄稿。)

distutils モジュールはxz圧縮をサポートするようになり、xztarを引数としてbdist --formatに渡すことで有効にできます。 (:issue: `16314` のSerhiyStorchakaによる寄稿。)


doctest

DocTestSuite()関数は、[X84X] ValueError を発生させる代わりに、 module にdocstringが含まれていない場合、空の unittest.TestSuite を返します。 (:issue: `15916` でGlennJonesによって寄稿されました。)


Eメール

新しいポリシーオプション Policy.mangle_from_ は、電子メール本文の"From "で始まる行の前にジェネレーターによって">"文字を付けるかどうかを制御します。 デフォルトは、 compat32 の場合はTrue、その他のすべてのポリシーの場合はFalseです。 (:issue: `20098` でMilanOberkirchによって寄稿されました。)

新しい Message.get_content_disposition()メソッドを使用すると、 Content-Disposition ヘッダーの正規値に簡単にアクセスできます。 (:issue: `21083` のAbhilashRajによる寄稿。)

新しいポリシーオプション EmailPolicy.utf8Trueに設定して、エンコードされた単語を使用する代わりにUTF-8文字セットを使用して電子メールヘッダーをエンコードできます。 これにより、Messages RFC 6532 に従ってフォーマットし、 RFC 6531 をサポートするSMTPサーバーで使用できます。 SMTPUTF8拡張。 (Rによる寄稿。 :issue: `24211` のDavidMurray。)

mime.text.MIMEText コンストラクターは、 charset.Charset インスタンスを受け入れるようになりました。 (:issue: `16324` でClaudeParozとBerkerPeksagによって寄稿されました。)


列挙型

Enum 呼び出し可能オブジェクトには、名前のみが指定されている場合に列挙値の初期数を指定するための新しいパラメーター start があります。

>>> Animal = enum.Enum('Animal', 'cat dog', start=10)
>>> Animal.cat
<Animal.cat: 10>
>>> Animal.dog
<Animal.dog: 11>

:issue: `21706` でEthanFurmanによって寄稿されました。)


フォールトハンドラー

enable()register()dump_traceback()、および dump_traceback_later()関数は、ファイルに加えてファイル記述子を受け入れるようになりました-オブジェクトのように。 (:issue: `23566` でWeiWuによって寄稿されました。)


functools

lru_cache()機構のほとんどがCで実装されるようになり、大幅に高速化されました。 (:issue: `14373` のMattJoiner、Alexey Kachayev、およびSerhiy Storchakaによる寄稿。)


グロブ

iglob()および glob()関数は、"**"パターンを使用して、サブディレクトリでの再帰検索をサポートするようになりました。 (:issue: `13968` でSerhiyStorchakaによって寄稿されました。)


gzip

GzipFile コンストラクターの mode 引数は、排他的作成を要求するために"x"を受け入れるようになりました。 (:issue: `19222` でTimHeaneyによって寄稿されました。)


heapq

merge()の要素比較は、新しいオプションの key キーワード引数と新しいオプションの reverse [でキー関数を渡すことでカスタマイズできるようになりました。 X175X]キーワード引数を使用して、要素の比較を逆にすることができます。

>>> import heapq
>>> a = ['9', '777', '55555']
>>> b = ['88', '6666']
>>> list(heapq.merge(a, b, key=len))
['9', '88', '777', '6666', '55555']
>>> list(heapq.merge(reversed(a), reversed(b), key=len, reverse=True))
['55555', '6666', '777', '88', '9']

:issue: `13742` でRaymondHettingerによって寄稿されました。)


http

英語で書かれたHTTPステータスコード、理由フレーズ、および長い説明のセットを定義する新しい HTTPStatus 列挙型。 (:issue: `21793` のDemianBrechtによる寄稿。)


http.client

HTTPConnection.getresponse()は、リモートサーバー接続が予期せず閉じられたときに RemoteDisconnected 例外を発生させるようになりました。 さらに、 ConnectionErrorRemoteDisconnectedはサブクラス)が発生した場合、クライアントソケットは自動的に閉じられ、次の要求で再接続します。

import http.client
conn = http.client.HTTPConnection('www.python.org')
for retries in range(3):
    try:
        conn.request('GET', '/')
        resp = conn.getresponse()
    except http.client.RemoteDisconnected:
        pass

:issue: `3566` でMartinPanterによって寄稿されました。)


idlelibとIDLE

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


imaplib

IMAP4 クラスは、コンテキストマネージャープロトコルをサポートするようになりました。 with ステートメントで使用すると、IMAP4 LOGOUTコマンドがブロックの最後で自動的に呼び出されます。 (:issue: `4972` でTarekZiadéとSerhiyStorchakaによって寄稿されました。)

imaplib モジュールは、 RFC 5161 (ENABLE Extension)および RFC 6855 (UTF-8サポート)をサポートするようになりました。 IMAP4.enable()メソッドを介して。 新しい IMAP4.utf8_enabled 属性は、 RFC 6855 サポートが有効になっているかどうかを追跡します。 (Milan Oberkirch、Rによる寄稿。 :issue: `21800` のDavidMurrayとMaciejSzulik。)

imaplib モジュールは、RFCで推奨されているように、UTF-8を使用して非ASCII文字列のユーザー名とパスワードを自動的にエンコードするようになりました。 (:issue: `21800` でMilanOberkirchによって寄稿されました。)


imghdr

what()関数は、 OpenEXR 形式(MartinVignaliとClaudiuPopaが:issue: `20295` で提供)とを認識するようになりました。 WebP 形式(:issue: `20197` でFabriceAnecheとClaudiuPopaによって寄稿されました。)


importlib

util.LazyLoader クラスを使用すると、起動時間が重要なアプリケーションでモジュールを遅延ロードできます。 (:issue: `17621` のBrettCannonによる寄稿。)

abc.InspectLoader.source_to_code()メソッドが静的メソッドになりました。 これにより、exec(code, module.__dict__)を実行して、文字列からコンパイルされたコードでモジュールオブジェクトを簡単に初期化できます。 (:issue: `21156` のBrettCannonによる寄稿。)

新しい util.module_from_spec()関数は、新しいモジュールを作成するための推奨される方法になりました。 types.ModuleType インスタンスを直接作成するのとは対照的に、この新しい関数は、渡されたスペックオブジェクトに基づいてさまざまなインポート制御属性を設定します。 (:issue: `20383` のBrettCannonによる寄稿。)


検査する

Signature クラスと Parameter クラスの両方が、選択可能でハッシュ可能になりました。 (:issue: `20726` および:issue:` 20334` でYurySelivanovによって寄稿されました。)

新しい BoundArguments.apply_defaults()メソッドは、欠落している引数のデフォルト値を設定する方法を提供します。

>>> def foo(a, b='ham', *args): pass
>>> ba = inspect.signature(foo).bind('spam')
>>> ba.apply_defaults()
>>> ba.arguments
OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])

:issue: `24190` でYurySelivanovによって寄稿されました。)

新しいクラスメソッド Signature.from_callable()により、 Signature のサブクラス化が容易になります。 (:issue: `17373` でYurySelivanovとEricSnowによって寄稿されました。)

signature()関数は、 follow_wrapped オプションのキーワード引数を受け入れるようになりました。これをFalseに設定すると、__wrapped__リンクの自動フォローが無効になります。 (:issue: `20691` でYurySelivanovによって寄稿されました。)

コルーチン関数およびコルーチンオブジェクトを検査するための一連の新しい関数が追加されました: iscoroutine()iscoroutinefunction()、[X166X ] isawaitable()、 getcoroutinelocals()、および getcoroutinestate()。 (:issue: `24017` および:issue:` 24400` でYurySelivanovによって寄稿されました。)

stack()trace()getouterframes()、および getinnerframes()関数は、名前付きタプルのリストを返すようになりました。 (:issue: `16808` でDanielShahafによって寄稿されました。)


io

新しい BufferedIOBase.readinto1()メソッド。基になるrawストリームの RawIOBase.read()または RawIOBase.readinto()メソッドへの呼び出しを最大1回使用します。 。 (:issue: `20578` のNikolausRathによる寄稿。)


IPアドレス

IPv4Network クラスと IPv6Network クラスの両方が、(address, netmask)タプル引数を受け入れるようになり、既存のアドレスからネットワークオブジェクトを簡単に構築できるようになりました。

>>> import ipaddress
>>> ipaddress.IPv4Network(('127.0.0.0', 8))
IPv4Network('127.0.0.0/8')
>>> ipaddress.IPv4Network(('127.0.0.0', '255.0.0.0'))
IPv4Network('127.0.0.0/8')

:issue: `16531` でPeterMoodyとAntoinePitrouによって寄稿されました。)

IPv4Network および IPv6Network クラスの新しいreverse_pointer属性は、逆引きDNSPTRレコードの名前を返します。

>>> import ipaddress
>>> addr = ipaddress.IPv4Address('127.0.0.1')
>>> addr.reverse_pointer
'1.0.0.127.in-addr.arpa'
>>> addr6 = ipaddress.IPv6Address('::1')
>>> addr6.reverse_pointer
'1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa'

:issue: `20480` でLeonWeberによって寄稿されました。)


json

json.tool コマンドラインインターフェイスは、入力で渡されるJSONオブジェクトのキーの順序を保持するようになりました。 新しい--sort-keysオプションを使用して、キーをアルファベット順に並べ替えることができます。 (:issue: `21650` のBerkerPeksagによる寄稿。)

JSONデコーダーは、 ValueError ではなく JSONDecodeError を発生させて、エラーに関するより適切なコンテキスト情報を提供するようになりました。 (:issue: `19361` でSerhiyStorchakaによって寄稿されました。)


linecache

新しい lazycache()関数を使用して、非ファイルベースのモジュールに関する情報をキャプチャし、後で getline()を介してその行を取得できるようにすることができます。 これにより、モジュールグローバルを無期限に持ち歩く必要がなく、ラインが実際に必要になるまでI / Oを実行する必要がなくなります。 (:issue: `17911` でRobertCollinsによって寄稿されました。)


ロケール

新しい delocalize()関数を使用して、LC_NUMERIC設定を考慮に入れて、文字列を正規化された数値文字列に変換できます。

>>> import locale
>>> locale.setlocale(locale.LC_NUMERIC, 'de_DE.UTF-8')
'de_DE.UTF-8'
>>> locale.delocalize('1.234,56')
'1234.56'
>>> locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.delocalize('1,234.56')
'1234.56'

:issue: `13918` のCédricKrierによる寄稿。)


ロギング

すべてのロギングメソッド(ロガー log()例外()クリティカル()デバッグ()など)、ブール値と例外タプルに加えて、 exc_info 引数として例外インスタンスを受け入れるようになりました。

>>> import logging
>>> try:
...     1/0
... except ZeroDivisionError as ex:
...     logging.error('exception', exc_info=ex)
ERROR:root:exception

:issue: `20537` でYurySelivanovによって寄稿されました。)

handlers.HTTPHandler クラスは、オプションの ssl.SSLContext インスタンスを受け入れて、HTTP接続で使用されるSSL設定を構成するようになりました。 (:issue: `22788` でAlexGaynorによって寄稿されました。)

handlers.QueueListener クラスは respect_handler_level キーワード引数を取り、Trueに設定すると、ハンドラーレベルを考慮してメッセージをハンドラーに渡します。 (Vinay Sajipによる寄稿)


lzma

LZMADecompressor.decompress()メソッドは、オプションの max_length 引数を受け入れて、解凍されたデータの最大サイズを制限するようになりました。 (:issue: `15955` でMartinPanterによって寄稿されました。)


算数

math モジュールに、 infnan の2つの新しい定数が追加されました。 (:issue: `23185` でMarkDickinsonによって寄稿されました。)

新しい関数 isclose()は、近似的な同等性をテストする方法を提供します。 (:issue: `24270` でChrisBarkerとTalEinatによって寄稿されました。)

新しい gcd()関数が追加されました。 fractions.gcd()関数は非推奨になりました。 (:issue: `22486` でMarkDickinsonとSerhiyStorchakaによって寄稿されました。)


マルチプロセッシング

sharedctypes.synchronized()オブジェクトは、コンテキストマネージャープロトコルをサポートするようになりました。 (:issue: `21565` でCharles-FrançoisNataliによって寄稿されました。)


オペレーター

attrgetter()itemgetter()、および methodcaller()オブジェクトがpickle化をサポートするようになりました。 (:issue: `22955` でJoshRosenbergとSerhiyStorchakaによって寄稿されました。)

新しい matmul()および imatmul()関数は、行列の乗算を実行します。 (:issue: `21176` でBenjaminPetersonによって寄稿されました。)


os

DirEntry オブジェクトのイテレータを返す新しい scandir()関数が追加されました。 可能であれば、 scandir()はディレクトリのスキャン中にファイル属性を抽出し、ファイルタイプまたは属性を決定するために後続のシステムコールを実行する必要をなくします。これにより、パフォーマンスが大幅に向上する可能性があります。 (:issue: `22524` でVictorStinnerの助けを借りてBenHoytによって寄稿されました。)

Windowsでは、新しい stat_result.st_file_attributes 属性が使用可能になりました。 これは、GetFileInformationByHandle()によって返されるBY_HANDLE_FILE_INFORMATION構造体のdwFileAttributesメンバーに対応します。 (:issue: `21719` でBenHoytによって寄稿されました。)

urandom()関数は、Linux3.17以降ではgetrandom()システムコールを使用し、OpenBSD5.6以降ではgetentropy()を使用するようになり、/dev/urandomを使用する必要がなくなりました。 ]そして潜在的なファイル記述子の枯渇による失敗を回避します。 (:issue: `22181` でVictorStinnerによって寄稿されました。)

新しい get_blocking()および set_blocking()関数を使用すると、ファイル記述子のブロックモード( O_NONBLOCK )を取得および設定できます(のVictor Stinnerによる寄稿)。発行: `22054` 。)

truncate()および ftrancate()関数がWindowsでサポートされるようになりました。 (:issue: `23668` でSteveDowerによって寄稿されました。)

渡された各パス名の最長の共通サブパスを返す新しい os.path.commonpath()関数があります。 os.path.commonprefix()関数とは異なり、常に有効なパスを返します。

>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
'/usr/l'

>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'

:issue: `10395` でRafikDraouiとSerhiyStorchakaによって寄稿されました。)


pathlib

新しい Path.samefile()メソッドを使用して、パスが別の Path オブジェクトまたは文字列のいずれかである別のパスと同じファイルを指しているかどうかを確認できます。

>>> import pathlib
>>> p1 = pathlib.Path('/etc/hosts')
>>> p2 = pathlib.Path('/etc/../etc/hosts')
>>> p1.samefile(p2)
True

:issue: `19775` でVajraskyKokとAntoinePitrouによって寄稿されました。)

Path.mkdir()メソッドは、mkdir -pおよび os.makedirs()機能に一致する新しいオプションの exit_ok 引数を受け入れるようになりました。 (:issue: `21539` のBerkerPeksagによる寄稿。)

~および~userプレフィックスを展開するための新しい Path.expanduser()メソッドがあります。 (:issue: `19776` でSerhiyStorchakaとClaudiuPopaによって寄稿されました。)

新しい Path.home()クラスメソッドを使用して、ユーザーのホームディレクトリを表す Path インスタンスを取得できます。 (:issue: `19777` でVictorSalgadoとMayankTripathiによって寄稿されました。)

新しい Path.write_text()Path.read_text()Path.write_bytes()Path.read_bytes()メソッドファイルの読み取り/書き込み操作を簡素化します。

次のコードスニペットは、既存のファイル~/spam42を作成または書き換えます。

>>> import pathlib
>>> p = pathlib.Path('~/spam42')
>>> p.expanduser().write_text('ham')
3

:issue: `20218` でChristopherWelbornによって寄稿されました。)


きゅうりのピクルス

バインドされていないメソッドやネストされたクラスなどのネストされたオブジェクトは、プロトコルバージョン4より古い pickleプロトコルを使用してpickle化できるようになりました。 プロトコルバージョン4はすでにこれらのケースをサポートしています。 (:issue: `23611` のSerhiyStorchakaによる寄稿。)


poplib

新しい POP3.utf8()コマンドは、POPサーバーがサポートしている場合、 RFC 6856 (国際化された電子メール)のサポートを有効にします。 (:issue: `21804` でMilanOberKirchによって寄稿されました。)


NS

固定長のグループへの参照と条件付き参照が、後読みアサーションで許可されるようになりました。

>>> import re
>>> pat = re.compile(r'(a|b).(?<=\1)c')
>>> pat.match('aac')
<_sre.SRE_Match object; span=(0, 3), match='aac'>
>>> pat.match('bbc')
<_sre.SRE_Match object; span=(0, 3), match='bbc'>

:issue: `9179` でSerhiyStorchakaによって寄稿されました。)

正規表現でのキャプチャグループの数は100に制限されなくなりました。 (:issue: `22437` のSerhiyStorchakaによる寄稿。)

sub()および subn()関数は、例外を発生させる代わりに、一致しないグループを空の文字列に置き換えるようになりました。 (:issue: `1519638` でSerhiyStorchakaによって寄稿されました。)

re.error 例外には、 msgpatternposlineno 、およびという新しい属性があります。 ] colno 、エラーに関するより良いコンテキスト情報を提供します:

>>> re.compile("""
...     (?x)
...     .++
... """)
Traceback (most recent call last):
   ...
sre_constants.error: multiple repeat at position 16 (line 3, column 7)

:issue: `22578` でSerhiyStorchakaによって寄稿されました。)


読み込まれた行

新しい append_history_file()関数を使用して、指定された数の履歴内の末尾要素を指定されたファイルに追加できます。 (:issue: `22940` でBrunoCauetによって寄稿されました。)


セレクター

新しい DevpollSelector は、Solarisでの効率的な/dev/pollポーリングをサポートします。 (:issue: `18931` のGiampaoloRodola 'による寄稿。)


シャティル

move()関数は copy_function 引数を受け入れるようになり、たとえば、デフォルトの copy2の代わりに copy()関数を使用できるようになりました。 ()移動時にファイルメタデータを無視する必要がある場合。 (:issue: `19840` でClaudiuPopaによって寄稿されました。)

make_archive()関数は、 xztar 形式をサポートするようになりました。 (:issue: `5411` のSerhiyStorchakaによる寄稿。)


信号

Windowsでは、 set_wakeup_fd()関数がソケットハンドルもサポートするようになりました。 (:issue: `22018` でVictorStinnerによって寄稿されました。)

signal モジュールのさまざまなSIG*定数は、列挙型に変換されています。 これにより、整数の「マジックナンバー」の代わりに、意味のある名前をデバッグ中に出力できます。 (:issue: `21076` のGiampaoloRodola 'による寄稿。)


smtpd

SMTPServer クラスと SMTPChannel クラスの両方が、 decode_data キーワード引数を受け入れて、SMTPトランザクションのDATA部分が[ X196X] コーデック、または代わりに SMTPServer.process_message()メソッドにバイト文字列として提供されます。 下位互換性の理由から、デフォルトはTrueですが、Python3.6ではFalseに変更されます。 decode_dataFalseに設定されている場合、process_messageメソッドはキーワード引数を受け入れるように準備する必要があります。 (:issue: `19662` でMaciejSzulikによって寄稿されました。)

SMTPServer クラスは、 decode_data が設定されている場合、8BITMIME拡張機能( RFC 6152 )をアドバタイズするようになりました [ X139X]。 クライアントがMAILコマンドでBODY=8BITMIMEを指定すると、 mail_options キーワードを介して SMTPServer.process_message()に渡されます。 (MilanOberkirchとRによる寄稿。 のDavidMurray:issue: `21795` 。)

SMTPServer クラスは、SMTPUTF8拡張機能( RFC 6531 :国際化された電子メール)もサポートするようになりました。 クライアントがMAILコマンドでSMTPUTF8 BODY=8BITMIMEを指定した場合、それらは mail_options キーワードを介して SMTPServer.process_message()に渡されます。 SMTPUTF8データを正しく処理するのは、process_messageメソッドの責任です。 (:issue: `21725` でMilanOberkirchによって寄稿されました。)

SMTPServer コンストラクターでIPv6アドレスを直接または名前解決を介して提供し、正常に接続できるようになりました。 (:issue: `14758` でMilanOberkirchによって寄稿されました。)


smtplib

新しい SMTP.auth()メソッドは、カスタム認証メカニズムを実装するための便利な方法を提供します。 (:issue: `15014` でMilanOberkirchによって寄稿されました。)

SMTP.set_debuglevel()メソッドは、追加のデバッグレベル(2)を受け入れるようになりました。これにより、デバッグメッセージでタイムスタンプが有効になります。 (:issue: `16914` でGavinChappellとMaciejSzulikによって寄稿されました。)

SMTP.sendmail()メソッドと SMTP.send_message()メソッドの両方が RFC 6531 (SMTPUTF8)をサポートするようになりました。 (MilanOberkirchとRによる寄稿。 のDavidMurray:issue: `22027` 。)


sndhdr

what()および whathdr()関数は、 namedtuple()を返すようになりました。 (:issue: `18615` のClaudiuPopaによる寄稿。)


ソケット

タイムアウトのある関数は、システムクロックではなく、単調なクロックを使用するようになりました。 (:issue: `22043` でVictorStinnerによって寄稿されました。)

新しい socket.sendfile()メソッドを使用すると、UNIXで高性能の os.sendfile()関数を使用して、ソケットを介してファイルを送信できます。アップロードは2〜3になります。プレーンな socket.send()を使用する場合よりも数倍高速です。 (:issue: `17552` のGiampaoloRodola 'による寄稿。)

socket.sendall()メソッドは、バイトが送受信されるたびにソケットタイムアウトをリセットしなくなりました。 ソケットタイムアウトは、すべてのデータを送信するための最大合計期間になりました。 (:issue: `23853` でVictorStinnerによって寄稿されました。)

socket.listen()メソッドの backlog 引数はオプションになりました。 デフォルトでは、 SOMAXCONN または128のいずれか小さい方に設定されています。 (:issue: `21455` でCharles-FrançoisNataliによって寄稿されました。)


ssl

メモリBIOサポート

:issue: `21965` でGeertJansenによって寄稿されました。)

新しい SSLObject クラスが追加され、 SSLSocket のネットワークI / O機能が不要であるか、最適ではない場合にSSLプロトコルサポートを提供します。 SSLObjectはSSLプロトコルインスタンスを表しますが、ネットワークI / Oメソッドを実装せず、代わりにメモリバッファインターフェイスを提供します。 新しい MemoryBIO クラスを使用して、PythonとSSLプロトコルインスタンス間でデータを渡すことができます。

メモリBIOSSLサポートは、主に、 SSLSocket の準備モデル(「選択/ポーリング」)が非効率的な非同期I / Oを実装するフレームワークで使用することを目的としています。

新しい SSLContext.wrap_bio()メソッドを使用して、新しいSSLObjectインスタンスを作成できます。


アプリケーション層プロトコルネゴシエーションのサポート

:issue: `20188` でBenjaminPetersonによって寄稿されました。)

OpenSSLサポートが存在する場合、 ssl モジュールは、 RFC 7301 で説明されているように、 Application-Layer Protocol Negotiation TLS拡張を実装するようになりました。

新しい SSLContext.set_alpn_protocols()を使用して、TLSハンドシェイク中にソケットがアドバタイズするプロトコルを指定できます。

新しい SSLSocket.selected_alpn_protocol()は、TLSハンドシェイク中に選択されたプロトコルを返します。 HAS_ALPN フラグは、ALPNサポートが存在するかどうかを示します。


その他の変更

使用中の実際のプロトコルバージョンを照会するための新しい SSLSocket.version()メソッドがあります。 (:issue: `20421` のAntoinePitrouによる寄稿。)

SSLSocket クラスがSSLSocket.sendfile()メソッドを実装するようになりました。 (:issue: `17552` のGiampaoloRodola 'による寄稿。)

SSLSocket.send()メソッドは、操作がブロックされる場合、非ブロックソケットで ssl.SSLWantReadError または ssl.SSLWantWriteError 例外を発生させるようになりました。 以前は、0を返していました。 (:issue: `20951` のNikolausRathによる寄稿。)

cert_time_to_seconds()関数は、 RFC 5280 に従って、入力時刻を現地時間ではなくUTCとして解釈するようになりました。 また、戻り値は常に int です。 (:issue: `19940` のAkiraLiによる寄稿。)

新しいSSLObject.shared_ciphers()および SSLSocket.shared_ciphers()メソッドは、ハンドシェイク中にクライアントによって送信された暗号のリストを返します。 (:issue: `23186` でBenjaminPetersonによって寄稿されました。)

SSLSocket.do_handshake()SSLSocket.read()SSLSocket.shutdown()、および SSLSocket.write()メソッド。 SSLSocket クラスは、バイトが送受信されるたびにソケットタイムアウトをリセットしなくなりました。 ソケットタイムアウトは、メソッドの最大合計期間になりました。 (:issue: `23853` でVictorStinnerによって寄稿されました。)

match_hostname()関数は、IPアドレスの照合をサポートするようになりました。 (:issue: `23239` のAntoinePitrouによる寄稿。)


sqlite3

Row クラスは、シーケンスプロトコル、特に reverse()反復とスライスインデックスを完全にサポートするようになりました。 (:issue: `10203` のClaudiuPopaによる寄稿、:issue:` 13583` のLucasSinclair、Jessica McKellar、Serhiy Storchakaによる寄稿)


サブプロセス

新しい run()関数が追加されました。 指定されたコマンドを実行し、完了したプロセスを説明する CompletedProcess オブジェクトを返します。 新しいAPIはより一貫性があり、以前のPythonバージョンとの互換性を維持する必要のないPythonコードでサブプロセスを呼び出すための推奨されるアプローチです。 (:issue: `23342` でThomasKluyverによって寄稿されました。)

例:

>>> subprocess.run(["ls", "-l"])  # doesn't capture output
CompletedProcess(args=['ls', '-l'], returncode=0)

>>> subprocess.run("exit 1", shell=True, check=True)
Traceback (most recent call last):
  ...
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

>>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)
CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n')

sys

新しいset_coroutine_wrapper()関数を使用すると、コルーチンオブジェクトasync def 関数によって作成されるたびに呼び出されるグローバルフックを設定できます。 対応するget_coroutine_wrapper()を使用して、現在設定されているラッパーを取得できます。 どちらの機能も暫定であり、デバッグのみを目的としています。 (:issue: `24017` でYurySelivanovによって寄稿されました。)

新しい is_finalizing()関数を使用して、Pythonインタープリターがシャットダウンしているかどうかを確認できます。 (:issue: `22696` のAntoinePitrouによる寄稿。)


sysconfig

Windowsのユーザースクリプトディレクトリの名前に、Pythonバージョンの最初の2つのコンポーネントが含まれるようになりました。 (:issue: `23437` でPaulMooreによって寄稿されました。)


tarfile

open()関数の mode 引数は、"x"を受け入れて排他的作成を要求するようになりました。 (:issue: `21717` のBerkerPeksagによる寄稿。)

TarFile.extractall()および TarFile.extract()メソッドは、キーワード引数 numeric_owner を受け取るようになりました。 Trueに設定すると、抽出されたファイルとディレクトリは、tarfileの数値uidgidによって所有されます。 False(デフォルト、および3.5より前のバージョンでの動作)に設定されている場合、それらはtarfile内の指定されたユーザーとグループによって所有されます。 (:issue: `23193` でMichaelVogtとEricSmithによって寄稿されました。)

TarFile.list()は、 TarFile.getmembers()によって返されるリストのサブセットに設定できるオプションの members キーワード引数を受け入れるようになりました。 (:issue: `21549` でSerhiyStorchakaによって寄稿されました。)


糸脱毛

Lock.acquire()メソッドと RLock.acquire()メソッドの両方で、タイムアウト管理に単調なクロックが使用されるようになりました。 (:issue: `22043` でVictorStinnerによって寄稿されました。)


時間

monotonic()関数が常に使用できるようになりました。 (:issue: `22043` でVictorStinnerによって寄稿されました。)


timeit

新しいコマンドラインオプション-uまたは--unit=Uを使用して、タイマー出力の時間単位を指定できます。 サポートされているオプションは、usecmsec、またはsecです。 (:issue: `18983` でJulianGindiによって寄稿されました。)

timeit()関数には、コードが実行される名前空間を指定するための新しい globals パラメーターがあります。 (:issue: `2527` でBenRobertsによって寄稿されました。)


tkinter

WindowsでTcl / Tk環境をセットアップするために使用されるtkinter._fixモジュールは、環境変数に永続的な変更を加えない_tkinterモジュールのプライベート関数に置き換えられました。 (:issue: `20035` のZacharyWareによる寄稿。)


トレースバック

新しい walk_stack()および walk_tb()関数は、フレームおよびトレースバックオブジェクトを便利にトラバースします。 (:issue: `17911` でRobertCollinsによって寄稿されました。)

新しい軽量クラス: TracebackExceptionStackSummary 、および FrameSummary 。 (:issue: `17911` でRobertCollinsによって寄稿されました。)

print_tb()関数と print_stack()関数の両方で、 limit 引数の負の値がサポートされるようになりました。 (:issue: `22619` のDmitryKazakovによる寄稿。)


種類

ジェネレーターおよびジェネレーターのようなオブジェクトを待機可能ファイルに変換する新しいコルーチン()関数。 (:issue: `24017` でYurySelivanovによって寄稿されました。)

CoroutineType と呼ばれる新しい型。これは、 async def 関数によって作成された coroutine オブジェクトに使用されます。 (:issue: `24400` でYurySelivanovによって寄稿されました。)


unicodedata

unicodedata モジュールは、 Unicode 8.0.0 のデータを使用するようになりました。


単体テスト

TestLoader.loadTestsFromModule()メソッドは、3番目の引数としてload_testsに渡されるキーワードのみの引数 pattern を受け入れるようになりました。 パッケージ名がデフォルトのパターンと一致することは不可能であるため、見つかったパッケージは、パスがパターンと一致するかどうかに関係なく、load_testsについてチェックされるようになりました。 (RobertCollinsとBarryAによる寄稿。 のワルシャウ:issue: `16662` 。)

ユニットテスト検出エラーは、 TestLoader インスタンスの TestLoader.errors 属性で公開されるようになりました。 (:issue: `19746` でRobertCollinsによって寄稿されました。)

トレースバックでローカル変数を表示するための新しいコマンドラインオプション--locals。 (:issue: `22936` でRobertCollinsによって寄稿されました。)


unittest.mock

Mock クラスには次の改善があります。

  • クラスコンストラクターに新しい unsafe パラメーターがあります。これにより、モックオブジェクトは"assert"で始まる属性名で AttributeError を発生させます。 (:issue: `21238` のKushalDasによる寄稿。)
  • モックオブジェクトが呼び出されたかどうかを確認するための新しい Mock.assert_not_called()メソッド。 (:issue: `21262` のKushalDasによる寄稿。)

MagicMock クラスは、__truediv__()__divmod__()、および__matmul__()演算子をサポートするようになりました。 (:issue: `20968` のJohannesBaiter、および:issue:` 23581` および:issue: `23568` のHåkanLövdahlによる寄稿。)

組み込み名にパッチを適用するときに、create=Truepatch()関数に明示的に渡す必要がなくなりました。 (:issue: `17660` のKushalDasによる寄稿。)


urllib

新しい request.HTTPPasswordMgrWithPriorAuth クラスを使用すると、HTTP基本認証のクレデンシャルを管理して、不要な401応答処理を排除したり、最初のリクエストで無条件にクレデンシャルを送信して、 Authorizationヘッダーが送信されない場合、401の代わりに404応答を返します。 (:issue: `19494` のMatejCeplと:issue:` 7159` のAkshitKhuranaによる寄稿。)

parse.urlencode()関数の新しい quote_via 引数は、必要に応じてクエリパーツのエンコードを制御する方法を提供します。 (:issue: `13866` でSamwyseとArnonYaariによって寄稿されました。)

request.urlopen()関数は、 ssl.SSLContext オブジェクトを context 引数として受け入れます。これは、HTTPS接続に使用されます。 (:issue: `22366` でAlexGaynorによって寄稿されました。)

parse.urljoin()が更新され、 ではなく、 RFC 3986 セマンティクスを相対URLの解決に使用するようになりました。 RFC 1808 および RFC 2396 。 (:issue: `22118` でDemianBrechtとSenthilKumaranによって寄稿されました。)


wsgiref

headers.Headers クラスコンストラクターの headers 引数はオプションになりました。 (:issue: `5800` のPabloTorres NavarreteとSilentGhostによる寄稿。)


xmlrpc

client.ServerProxy クラスは、コンテキストマネージャープロトコルをサポートするようになりました。 (:issue: `20627` でClaudiuPopaによって寄稿されました。)

client.ServerProxy コンストラクターは、オプションの ssl.SSLContext インスタンスを受け入れるようになりました。 (:issue: `22960` でAlexGaynorによって寄稿されました。)


xml.sax

SAXパーサーは、 xmlreader.InputSource オブジェクトの文字ストリームをサポートするようになりました。 (:issue: `2175` でSerhiyStorchakaによって寄稿されました。)

parseString()は、 str インスタンスを受け入れるようになりました。 (:issue: `10590` でSerhiyStorchakaによって寄稿されました。)


ZIPファイル

ZIP出力をシークできないストリームに書き込むことができるようになりました。 (:issue: `23252` のSerhiyStorchakaによる寄稿。)

ZipFile.open()メソッドの mode 引数は、"x"を受け入れて排他的作成を要求するようになりました。 (:issue: `21717` のSerhiyStorchakaによる寄稿。)


その他のモジュールレベルの変更

mmapossaudiodevsocketssl 、および codecs モジュールの多くの関数が、書き込み可能なを受け入れるようになりました。 ]バイトのようなオブジェクト。 (:issue: `23001` のSerhiyStorchakaによる寄稿。)


最適化

os.walk()関数は、POSIXシステムでは3〜5倍、Windowsでは7〜20倍高速化されています。 これは、新しい os.scandir()関数を使用して行われました。この関数は、基になるreaddirまたはFindFirstFile / FindNextFileシステムコールからファイル情報を公開します。 (:issue: `23605` のVictorStinnerの助けを借りてBenHoytによって寄稿されました。)

bytes(int)(0バイトで埋められる)の構築はより高速で、大きなオブジェクトに使用するメモリが少なくなります。 malloc()の代わりにcalloc()を使用して、これらのオブジェクトにメモリを割り当てます。 (:issue: `21233` でVictorStinnerによって寄稿されました。)

ipaddress IPv4Network および IPv6Network の一部の操作は、サブネット()、スーパーネット()[など、大幅に高速化されています。 X155X]、 summary_address_range()collectup_addresses()。 スピードアップは3〜15倍の範囲です。 (:issue: `21486`:issue:` 21487`:issue: `20826` のAntoinePitrou、Michel Albert、Markusによる寄稿、:issue: `23266` 。)

ipaddress オブジェクトのピクルスは、大幅に小さい出力を生成するように最適化されました。 (:issue: `23133` でSerhiyStorchakaによって寄稿されました。)

io.BytesIO での多くの操作が、50%から100%高速になりました。 (:issue: `15381` のSerhiyStorchakaと:issue:` 22003` のDavidWilsonによる寄稿。)

marshal.dumps()関数が高速になりました。通常のデータではバージョン3および4で65〜85%、バージョン0〜2で20〜25%、最良の場合は最大5倍です。 (:issue: `20416` および:issue:` 23344` でSerhiyStorchakaによって寄稿されました。)

UTF-32エンコーダーは3〜7倍高速になりました。 (:issue: `15027` でSerhiyStorchakaによって寄稿されました。)

正規表現は最大10 % f asterで解析されるようになりました。 (:issue: `19380` でSerhiyStorchakaによって寄稿されました。)

json.dumps()関数は、ensure_ascii=Trueと同じ速さでensure_ascii=Falseで実行するように最適化されました。 (:issue: `23206` の稲田直樹による寄稿。)

PyObject_IsInstance()および PyObject_IsSubclass()関数は、2番目の引数が type をメタクラスとして持つ一般的なケースで高速化されました。 (:issue: `22540` でGeorgBrandlに寄稿されました。)

メソッドのキャッシュがわずかに改善され、一部のベンチマークで最大5%のパフォーマンスが向上しました。 (:issue: `22847` のAntoinePitrouによる寄稿。)

ランダムモジュールのオブジェクトは、64ビットビルドで50 % le ssメモリを使用するようになりました。 (:issue: `23488` のSerhiyStorchakaによる寄稿。)

property() getter呼び出しは最大25 % f asterです。 (:issue: `23910` でJoeJevnikによって寄稿されました。)

fractions.Fraction のインスタンス化は最大30 % f asterになりました。 (:issue: `22464` でStefanBehnelによって寄稿されました。)

文字列メソッド find()rfind()split()partition()および in 文字列演算子は、1文字の部分文字列を検索するために大幅に高速になりました。 (:issue: `23573` でSerhiyStorchakaによって寄稿されました。)


ビルドとCAPIの変更

新しいcalloc関数が追加されました。

:issue: `21233` でVictorStinnerによって寄稿されました。)

新しいエンコード/デコードヘルパー関数:

:issue: `18395` でVictorStinnerによって寄稿されました。)

新しい PyCodec_NameReplaceErrors()関数は、Unicodeエンコードエラーを\N{...}エスケープに置き換えます。 (:issue: `19676` でSerhiyStorchakaによって寄稿されました。)

新しい PyErr_FormatV()関数は、 PyErr_Format()に似ていますが、va_list引数を受け入れます。 (:issue: `18711` のAntoinePitrouによる寄稿。)

新しいPyExc_RecursionError例外。 (:issue: `19235` でGeorgBrandlによって寄稿されました。)

PEP 489 によって導入された新しい PyModule_FromDefAndSpec()PyModule_FromDefAndSpec2()、および PyModule_ExecDef()関数–マルチ-フェーズ拡張モジュールの初期化。 (:issue: `24268` のPetrViktorinによる寄稿。)

行列の乗算を実行するための新しい PyNumber_MatrixMultiply()および PyNumber_InPlaceMatrixMultiply()関数。 (:issue: `21176` でBenjaminPetersonによって寄稿されました。 詳細については、 PEP 465 も参照してください。)

PyTypeObject.tp_finalize スロットが安定したABIの一部になりました。

Windowsビルドには、 Visual Studio 2015 の一部として利用可能なMicrosoftVisual C ++ 14.0が必要になりました。

一部のプラットフォームでは、拡張モジュールのファイル名にプラットフォーム情報タグが含まれるようになりました(タグはオプションであり、CPythonはそれなしで拡張機能をインポートしますが、タグが存在して不一致の場合、拡張機能は読み込まれません)。

  • Linuxでは、拡張モジュールのファイル名は.cpython-<major><minor>m-<architecture>-<os>.pydで終わります。
    • <major>はPythonバージョンのメジャー番号です。 Python 3.5の場合、これは3です。
    • <minor>はPythonバージョンのマイナー番号です。 Python 3.5の場合、これは5です。
    • <architecture>は、拡張モジュールを実行するために構築されたハードウェアアーキテクチャです。 最も一般的には、32ビットIntelプラットフォームの場合はi386、64ビットIntel(およびAMD)プラットフォームの場合はx86_64のいずれかです。
    • <os>は常にlinux-gnuです。ただし、64ビットプラットフォームで32ビットABIと通信するように構築された拡張機能は除きます。この場合、linux-gnu32(および [ X145X]はx86_64)になります。
  • Windowsでは、拡張モジュールのファイル名は<debug>.cp<major><minor>-<platform>.pydで終わります。
    • <major>はPythonバージョンのメジャー番号です。 Python 3.5の場合、これは3です。
    • <minor>はPythonバージョンのマイナー番号です。 Python 3.5の場合、これは5です。
    • <platform>は、拡張モジュールが構築されたプラットフォームであり、Win32の場合はwin32、Win64の場合はwin_amd64、Windows Itanium64の場合はwin_ia64win_arm WindowsオンARM用。
    • デバッグモードでビルドされている場合、<debug>_dになり、それ以外の場合は空白になります。
  • OS Xプラットフォームでは、拡張モジュールのファイル名が-darwin.soで終わるようになりました。
  • 他のすべてのプラットフォームでは、拡張モジュールのファイル名はPython3.4の場合と同じです。


非推奨

新しいキーワード

asyncおよびawaitを変数、クラス、関数、またはモジュール名として使用することはお勧めしません。 Python3.5の PEP 492 によって導入され、Python3.7では適切なキーワードになります。


非推奨のPythonの動作

ジェネレーター内で StopIteration 例外を発生させると、サイレント PendingDeprecationWarning が生成されます。これは、Python 3.6では非サイレントの非推奨警告になり、 RuntimeError をトリガーします。 Python3.7。 詳細については、 PEP 479:ジェネレーター内のStopIteration処理の変更を参照してください。


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

Windows XPはMicrosoftでサポートされなくなったため、 PEP 11 により、CPython3.5はこのOSで正式にサポートされなくなりました。


非推奨のPythonモジュール、関数、メソッド

formatter モジュールは完全に非推奨になり、Python3.6での削除が予定されています。

asyncio.async()関数は非推奨になり、 sure_future()が優先されます。

smtpd モジュールは、これまで常にutf-8コーデックを使用して電子メールメッセージのDATA部分をデコードしてきました。 これは、 SMTPServer への新しい decode_data キーワードによって制御できるようになりました。 デフォルト値はTrueですが、このデフォルトは非推奨です。 decode_data キーワードを適切な値で指定して、非推奨の警告を回避します。

http.cookies.Morsel オブジェクトの keyvalue 、および coded_value に値を直接割り当てることは非推奨です。 代わりに set()メソッドを使用してください。 さらに、 set()の文書化されていない LegalChars パラメーターは非推奨になり、無視されるようになりました。

string.Formatter クラスの format()メソッドへのキーワード引数 format_string としてのフォーマット文字列の受け渡しは非推奨になりました。 (:issue: `23671` のSerhiyStorchakaによる寄稿。)

platform.dist()およびplatform.linux_distribution()関数は非推奨になりました。 Linuxディストリビューションは、それ自体を記述するために非常に多くの異なる方法を使用しているため、機能はパッケージに任されています。 (:issue: `1322` でVajraskyKokとBerkerPeksagによって寄稿されました。)

以前に文書化されていなかった inspect.Signaturefrom_functionおよびfrom_builtinメソッドは非推奨になりました。 代わりに、新しい Signature.from_callable()メソッドを使用してください。 (:issue: `24248` でYurySelivanovによって寄稿されました。)

inspect.getargspec()関数は非推奨であり、Python3.6で削除される予定です。 (詳細については、:issue: `20438` を参照してください。)

inspect getfullargspec()getcallargs()、および formatargspec()関数は非推奨になり、 inspectが優先されます。署名() API。 (:issue: `20438` でYurySelivanovによって寄稿されました。)

getargvalues()および formatargvalues()関数は、Python3.5.0のリリースで非推奨として誤ってマークされました。

strパターンでの re.LOCALE フラグまたは re.ASCII の使用は非推奨になりました。 (:issue: `22407` のSerhiyStorchakaによる寄稿。)

'\'とASCII文字で構成される認識されない特殊なシーケンスを正規表現パターンと置換パターンで使用すると、非推奨の警告が表示されるようになり、Python3.6では禁止されます。 (:issue: `23622` のSerhiyStorchakaによる寄稿。)

unittest.TestLoader.loadTestsFromModule()メソッドの文書化されていない非公式の use_load_tests デフォルト引数は非推奨になり、無視されるようになりました。 (RobertCollinsとBarryAによる寄稿。 のワルシャウ:issue: `16662` 。)


NS

APIと機能の削除

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

  • __version__属性は電子メールパッケージから削除されました。 電子メールコードは長い間stdlibとは別に出荷されておらず、__version__文字列は過去数回のリリースで更新されていません。
  • ftplib モジュールの内部Netrcクラスは、3.4で非推奨になり、現在は削除されています。 (:issue: `6623` のMattChaputによる寄稿。)
  • .pyoファイルの概念は削除されました。
  • 暫定 asyncio モジュールのJoinableQueueクラスは、3.4.4で非推奨になり、現在は削除されています。 (Aによる寄稿。 のJesseJiryu Davis:issue: `23464` 。)


Python3.5への移植

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

Pythonの動作の変更

  • 見落としのため、以前のPythonバージョンは誤って次の構文を受け入れていました。

    f(1 for x in [1], *args)
    f(1 for x in [1], **kwargs)

    Python 3.5では、 SyntaxError が正しく発生するようになりました。これは、関数の唯一の引数ではない場合、ジェネレーター式を括弧で囲む必要があるためです。


PythonAPIの変更

  • PEP 475 :Pythonシグナルハンドラーが例外を発生させない場合、 InterruptedError を発生させる代わりに、シグナルによって中断されたときにシステムコールが再試行されるようになりました。
  • Python 3.5より前は、 datetime.time オブジェクトは、UTCで深夜を表す場合はfalseと見なされていました。 この動作はあいまいでエラーが発生しやすいと見なされ、Python3.5で削除されました。 詳細については、:issue: `13936` を参照してください。
  • ssl.SSLSocket.send()メソッドは、操作がブロックされる場合、非ブロックソケットで ssl.SSLWantReadError または ssl.SSLWantWriteError のいずれかを発生させるようになりました。 以前は、0を返していました。 (:issue: `20951` のNikolausRathによる寄稿。)
  • ジェネレーターの__name__属性は、コード名からではなく、関数名から設定されるようになりました。 gen.gi_code.co_nameを使用してコード名を取得します。 ジェネレーターには、新しい__qualname__属性、修飾名もあります。これは、ジェネレーターの表現に使用されるようになりました(repr(gen))。 (:issue: `21205` でVictorStinnerによって寄稿されました。)
  • 非推奨の「strict」モードと HTMLParserHTMLParser.error()、およびHTMLParserError例外の引数が削除されました。 (:issue: `15114` のEzioMelottiによる寄稿。) HTMLParserconvert_charrefs 引数はデフォルトでTrueになりました。 (:issue: `21047` のBerkerPeksagによる寄稿。)
  • 正式にはAPIの一部ではありませんが、移植の目的(つまり、テストの修正)で、以前は「 'sometype'はバッファプロトコルをサポートしていません」という形式であったエラーメッセージが「a バイトのようなオブジェクトが必要です。「sometype」ではありません。 (:issue: `16518` のEzioMelottiによる寄稿。)
  • 現在のディレクトリが存在しないディレクトリに設定されている場合、 FileNotFoundError は発生せず、代わりに find_spec()None without [ X192X] sys.path_importer_cacheNoneをキャッシュします。これは通常の場合(:issue: `22834` )とは異なります。
  • http.client および http.server からのHTTPステータスコードとメッセージは、共通の HTTPStatus 列挙型にリファクタリングされました。 http.client および http.server の値は、下位互換性のために引き続き使用できます。 (:issue: `21793` のDemianBrechtによる寄稿。)
  • インポートローダーがimportlib.machinery.Loader.exec_module()を定義すると、create_module()も定義されるようになります( DeprecationWarning が発生すると、Python 3.6ではエラーになります)。 ローダーが importlib.abc.Loader を継承している場合は、何もする必要はありません。それ以外の場合は、create_module()を定義してNoneを返します。 (:issue: `23014` のBrettCannonによる寄稿。)
  • re.split()関数は常に空のパターン一致を無視したため、"x*"パターンは"x+"と同じように機能し、"\b"パターンは機能しませんでした。 re.split()は、パターンが空の文字列と一致する可能性がある場合に警告を発するようになりました。 互換性のために、空の文字列と一致しないパターンを使用してください(例: "x*"の代わりに"x+")。 空の文字列にしか一致しなかったパターン("\b"など)でエラーが発生するようになりました。 (:issue: `22818` のSerhiyStorchakaによる寄稿。)
  • http.cookies.Morsel dictのようなインターフェースは、自己整合性があります。morselの比較では、キーが考慮されるようになりました。 copy( )は、 dict ではなく Morsel インスタンスになり、 update()は、更新内のいずれかのキーの場合に例外を発生させるようになりました。辞書が無効です。 さらに、 set()の文書化されていない LegalChars パラメーターは非推奨になり、無視されるようになりました。 (:issue: `2211` のDemianBrechtによる寄稿。)
  • PEP 488 は、Pythonから.pyoファイルを削除し、.pycファイル名にオプションのopt-タグを導入しました。 importlib.util.cache_from_source()は、opt-タグの制御に役立つ optimization パラメーターを取得しました。 このため、関数の debug_override パラメーターは非推奨になりました。 .pyo ファイルもPythonインタープリターへのファイル引数としてサポートされなくなったため、単独で配布した場合(つまり、 ソースレスコード配布)。 Python 3.5ではバイトコードのマジックナンバーが変更されているため、このPEPに関係なく、以前のバージョンのPythonの古い .pyo ファイルはすべて無効です。
  • socket モジュールは、Linux3.6以降で CAN_RAW_FD_FRAMES 定数をエクスポートするようになりました。
  • ssl.cert_time_to_seconds()関数は、 RFC 5280 に従って、入力時刻を現地時間ではなくUTCとして解釈するようになりました。 また、戻り値は常に int です。 (:issue: `19940` のAkiraLiによる寄稿。)
  • pygettext.pyツールは、POT-Creation-Dateヘッダーのタイムゾーンに標準の+ NNNN形式を使用するようになりました。
  • smtplib モジュールは、デバッグ出力に以前のモジュールレベルのstderr変数の代わりに、 sys.stderr を使用するようになりました。 (テスト)プログラムがデバッグ出力をキャプチャするためにモジュールレベルの変数にパッチを適用することに依存している場合は、代わりにsys.stderrをキャプチャするようにプログラムを更新する必要があります。
  • str.startswith()および str.endswith()メソッドは、空の文字列を検索し、インデックスが完全に範囲外の場合にTrueを返さなくなりました。 (:issue: `24284` でSerhiyStorchakaによって寄稿されました。)
  • inspect.getdoc()関数は、基本クラスから継承されたドキュメント文字列を返すようになりました。 継承されたドキュメントが適切である場合、ドキュメント文字列を複製する必要がなくなりました。 継承された文字列を抑制するには、空の文字列を指定する必要があります(または、ドキュメントに入力する必要があります)。 この変更は、 pydoc モジュールと help()関数の出力に影響します。 (:issue: `15582` のSerhiyStorchakaによる寄稿。)
  • ネストされた functools.partial()呼び出しがフラット化されるようになりました。 以前の動作に依存していた場合は、 functools.partial()オブジェクトに属性を追加するか、 functools.partial()のサブクラスを作成できます。 (:issue: `7830` でAlexanderBelopolskyによって寄稿されました。)


CAPIの変更

  • (非公開)PyMemoryViewObject構造の文書化されていないformatメンバーが削除されました。 memoryobject.hの関連パーツに依存するすべての拡張機能を再構築する必要があります。
  • PyMemAllocator構造の名前が PyMemAllocatorEx に変更され、新しいcallocフィールドが追加されました。
  • 参照をリークした文書化されていないマクロPyObject_REPRを削除しました。 PyUnicode_FromFormat()のような関数でフォーマット文字%Rを使用して、オブジェクトの repr()をフォーマットします。 (:issue: `22453` のSerhiyStorchakaによる寄稿。)
  • __module__属性がないと、pickle化とイントロスペクションが中断されるため、__module__属性のない組み込み型に対して非推奨の警告が発生するようになりました。 これは将来的にAttributeErrorになるでしょう。 (:issue: `20204` でSerhiyStorchakaによって寄稿されました。)
  • PEP 492 実装の一部として、 PyTypeObjecttp_reservedスロットがtp_as_asyncスロットに置き換えられました。 新しいタイプ、構造、および機能については、コルーチンオブジェクトを参照してください。


Python3.5.4での注目すべき変更

新しいmake regen-allビルドターゲット

クロスコンパイルを簡素化し、既存のバージョンのPythonがすでに利用可能でなくても、CPythonを確実にコンパイルできるようにするために、autotoolsベースのビルドシステムは、ファイルの変更時間に基づいて生成されたファイルを暗黙的に再コンパイルしようとしなくなりました。

代わりに、新しいmake regen-allコマンドが追加され、必要に応じてこれらのファイルを強制的に再生成します(例: Pythonの初期バージョンが、事前に生成されたバージョンに基づいてすでに構築された後)。

より選択的な再生ターゲットも定義されています。詳細については、:source: `Makefile.pre.in` を参照してください。

:issue: `23404` でVictorStinnerによって寄稿されました。)

バージョン3.5.4の新機能。


make touchビルドターゲットの削除

以前は、変更時刻を更新して生成されたファイルの暗黙的な再生成を要求するために使用されていたmake touchビルドターゲットが削除されました。

新しいmake regen-allターゲットに置き換えられました。

:issue: `23404` でVictorStinnerによって寄稿されました。)

バージョン3.5.4で変更されました。