1. ホーム
  2. python

なぜPython 3は後方互換性がないのですか?[クローズド]です。

2023-10-01 17:12:24

質問

Python3は後方互換性がないことを知りました。

古いバージョンのPythonを使用している多くのアプリケーションに影響を与えないのでしょうか?

Python 3の開発者は、どうして後方互換性を持たせることが絶対に必要だと考えなかったのでしょうか?

どのように解決するのですか?

Python 3.0は後方互換性がありますか、そしてなぜですか?

Python 3.0は非常に便利な機能をたくさん実装していますが、後方互換性を破っています。Python 2.xのコードがPython 3.xで正しく動作しないかもしれないという事実にもかかわらず、素晴らしい機能を実装できるように、意図的にそうしているのです。

つまり、基本的には Python 3.0 は意図的に後方互換性がありません。 . そのおかげで、全く新しい機能のセットを享受することができます。 とまで言われている"。 Python 3000 "または " Python 3K "です。

" から。 Python 3.0 の新機能 "(利用可能 はこちら ):

Python 3.0、2.6と比較して。Python 3.0 は "Python 3000" または "Py3K" とも呼ばれます。 は意図的に後方互換性のない Python の最初のリリースです。 . 通常のリリースよりも多くの変更点があり、すべてのPythonユーザにとって重要な変更点があります。とはいえ、変更点を消化した後では、Python は本当にそれほど変わっていないことがわかるでしょう。 私たちはほとんど、よく知られた厄介事や欠点を修正し、多くの古いゴミを削除しています。 .

Python 3.0の新機能、後方互換性の破壊

後方互換性を壊しながらも、同時に言語を向上させたと考えられる、最も注目すべき機能をいくつか紹介します。

  • print は現在ではステートメントではなく関数であり、ステートメントとして使用するとエラーになります。
  • 様々な関数 & メソッドがリストではなくイテレータまたはビューを返すようになり、結果の反復処理がよりメモリ効率的になりました(メモリ内に結果のリスト全体を保存する必要がありません)。
  • cmp のようなソート関数の引数は sorted()list.sort() はサポートされなくなったので、次のように置き換える必要があります。 key 引数で指定します。
  • int は、Python 2.x の long と同じになり、数値処理の複雑さが軽減されました。
  • / 演算子はデフォルトで真の除算のための演算子になりました(まだ // を使うことができます)。
  • テキストは、Python 3.x ではデフォルトで Unicode になっています。
  • True , FalseNone は予約語になりました(そのため True, False = False, True ,
  • はメタクラスの使用法を変更しました。
  • から派生した例外が必要です。 BaseException に由来する必要があり、Python 2.x とは異なる方法で raise & catch されなければなりません。
  • といった他の多くの変更により、Python はより読みやすく、一貫した & 明示的なものになりました。