トップページに戻る
pythonバージョンごとの互換性
- プログラムの互換性に及ぼす可能性のあるバージョンごとのupdateを記録しておきます。
- tkProgでは、当面、3.6以降対応とします。
ただし、:=
代入演算子を使用したほうが良いため、3.8以降対応に移行する可能性があります。
tkProgのVer3.6対応
- f-string f"{var=}" (Ver 3.8) は、f"var={var}"
とすることで 3.6対応にします
- TOML (Ver 3.11) は tklib.tkIniFile でカバーします
- () 内のリストの最後に , は残しません (Ver )3.10 bpo-12782)。リストなどは追加しやすいように、行頭に
, を置きます。
例: a_list = ("a"
, "b"
, "c"
)
2023/9/21時点
- 3.13: https://docs.python.org/3.13/
JIT compilerの実装開始
(デフォルトで無効化)
GIL (global interpreter lock) 解除版の使用を可能に
cgiなどのobsoleteライブラリの削除
- 3.12: https://docs.python.org/3.12/whatsnew/3.12.html
PEP 701: Syntactic formalization of f-strings
f書式文字列の{}に入れられる構文の範囲が広がります
例: f"This is the playlist: {", ".join(songs)}"
\,"や改行なども入れられます
PEP 688: Making the buffer protocol accessible in Python
PEP 692: Using TypedDict for more precise **kwargs typing
PEP 695: Type Parameter Syntax
PEP 698: Override Decorator for Static Typing
PEP 623: Remove wstr from Unicode
PEP 632: Remove the distutils package. See the migration guide for advice on
its replacement.
- 3.11: https://docs.python.org/3.11/whatsnew/3.11.html
PEP 654: Exception Groups and except*
PEP 678: Exceptions can be enriched with notes
PEP 680: tomllib Support for parsing TOML in
the Standard Library
将来的に TOML を多用する可能性があります
PEP 646: Variadic generics
PEP 655: Marking individual TypedDict items as required or not-required
PEP 673: Self type
PEP 675: Arbitrary literal string type
PEP 681: Data class transforms
PEP 594: Many legacy standard library modules have been deprecated and will
be removed in Python 3.13
PEP 624: Py_UNICODE encoder APIs have been removed
PEP 670: Macros converted to static inline functions
- 3.10: https://docs.python.org/3.10/
PEP 634, Structural Pattern Matching: Specification
PEP 635, Structural Pattern Matching: Motivation and Rationale
PEP 636, Structural Pattern Matching: Tutorial
bpo-12782, Parenthesized context managers are now
officially allowed.
()の中の構文の最後を , で終えてもエラーになりません
New features in the standard library:
PEP 618, Add Optional Length-Checking To zip.
PEP 604, Allow writing union types as X | Y
PEP 612, Parameter Specification Variables
PEP 613, Explicit Type Aliases
PEP 647, User-Defined Type Guards
PEP 644, Require OpenSSL 1.1.1 or newer
PEP 632, Deprecate distutils module.
PEP 623, Deprecate and prepare for the removal of the wstr member in
PyUnicodeObject.
PEP 624, Remove Py_UNICODE encoder APIs
PEP 597, Add optional EncodingWarning
- 3.9: https://docs.python.org/3.9/
PEP 584, union operators added to dict;
PEP 585, type hinting generics in standard collections;
PEP 614, relaxed grammar restrictions on decorators.
PEP 616, string methods to remove prefixes and suffixes.
PEP 593, flexible function and variable annotations;
os.pidfd_open() added that allows process management without races and
signals.
PEP 615, the IANA Time Zone Database is now present in the standard
library in the zoneinfo module;
an implementation of a topological sort of a graph is now provided in
the new graphlib module.
- 3.8: https://docs.python.org/3.8/
Assignment expressions
式構文中で代入演算子 := を使うことにより、代入と、代入した値の評価が同時にできます
Positional-only parameters
引数で、/ を置くことにより、/
以前の引数を位置指定引数に限定できます
f-strings support = for self-documenting
expressions and debugging
f書式文字列で、{user=} のように、{}内に =
を指定し、user=hogehogeのような置換ができます
- 3.7: https://docs.python.org/3.7/
PEP 563, postponed evaluation of type annotations.
async and await are now reserved keywords.
New library modules:
contextvars: PEP 567 ? Context Variables
dataclasses: PEP 557 ? Data Classes
importlib.resources
PEP 553, the new breakpoint() function.
- 3.6: https://docs.python.org/3.6/
PEP 498, formatted string literals.
PEP 515, underscores in numeric literals.
PEP 526, syntax for variable annotations.
PEP 525, asynchronous generators.
PEP 530: asynchronous comprehensions.
New library modules:
secrets: PEP 506 ? Adding A Secrets Module To The Standard Library.
- 3.5: https://docs.python.org/3.5/
PEP 492, coroutines with async and await syntax. PEP 465, a new matrix
multiplication operator: a @ b.
PEP 448, additional unpacking generalizations.
New library modules:
typing: PEP 484 ? Type Hints.
zipapp: PEP 441 Improving Python ZIP Application Support.
New built-in features:
bytes % args, bytearray % args: PEP 461 ? Adding % formatting to bytes and
bytearray. New bytes.hex(), bytearray.hex() and memoryview.hex() methods.
(Contributed by Arnon Yaari in bpo-9951.) memoryview now supports tuple
indexing (including multi-dimensional). (Contributed by Antoine Pitrou in
bpo-23632.) Generators have a new gi_yieldfrom attribute, which returns the
object being iterated by yield from expressions. (Contributed by Benno
Leslie and Yury Selivanov in bpo-24450.) A new RecursionError exception is
now raised when maximum recursion depth is reached. (Contributed by Georg
Brandl in bpo-19235.)
Ver2.xからの主要な変化
参考: https://postd.cc/the-key-differences-between-python-2-7-x-and-python-3-x-with-examples/
2.xのプログラムを3.x対応させる支援機能
- __future__モジュール
- 2to3 コードコンバータ
文法の変化
- 2.xでは print は組み込み構文でしたが、3.xでは 関数
print() になりました。()が必須になります。
3.x への変換には、print文に()を追加します。
- 2.xでは 整数同士の /
による除算は整数の除算でしたが、3.xでは浮動小数点に変換されます。
3.xで整数の除算を行う場合は // を使います。
2.xで from __future__ import division
をインポートすることで、3.xと同じ動作にできます
2.x: 3 / 2 = 1
3 // 2 = 1
3 / 2.0 = 1.5
3 // 2.0 = 1.0
3.x: 3 / 2 = 1.5
3 // 2 = 1
3 / 2.0 = 1.5
3 // 2.0 = 1.0
- 3.xではUnicodeが標準となりました。
3.xへの変換には、u"" を ""
に置き換えます。shift_jisのファイルを読み込む場合、open()関数なので
encoding="shift_jis"
を使うなどの工夫が必要になります。
- 2.xではiteratorの取り出しに next() 関数と
.next()メソッドを使えましたが、3.xでは next()
関数だけになりました。
3.xへの変換には、.next()メソッドをnext()関数で置き換えます。
- 2.xの.has_keyメソッドは削除されました。
3.xへの減間には、has_attr()関数などが使えます。
- map() 関数は
2.xではリスト型変数を返しますが、3.xではmapオブジェクトを返します。
3.xへの変換には、返り値を list()関数
でリスト型に変換します。