Python 2 vs Python 3:実用的な考慮事項

前書き

Pythonは、非常に読みやすく汎用性の高いプログラミング言語です。 英国のコメディグループMonty Pythonに触発された名前で、この言語を楽しく使用することがPython開発チームの重要な基本目標でした。 簡単にセットアップでき、エラーについてすぐにフィードバックできる比較的簡単なスタイルで記述されているため、Pythonは初心者に最適です。

Pythonはマルチパラダイム言語であるため(つまり、スクリプトやオブジェクト指向を含む複数のプログラミングスタイルをサポートします)、汎用的な使用に適しています。 ユナイテッドスペースアライアンス(NASAのメインシャトルサポート請負業者)やインダストリアルライト&マジック(ルーカスフィルムのVFXおよびアニメーションスタジオ)などの組織によってますます業界で使用されているPythonは、追加のプログラミング言語を探している人に多くの可能性を提供します。

1980年代後半に開発され、1991年に最初に公開されたPythonは、コミュニティでまだ非常に活発なGuido van Rossumによって作成されました。 ABCプログラミング言語の後継として考案されたPythonの最初の反復には、すでに例外処理、functions、およびclasses with inheritanceが含まれていました。 comp.lang.pythonという重要なUsenetニュースグループディスカッションフォーラムが1994年に結成されたとき、Pythonのユーザーベースが成長し、Pythonがオープンソース開発で最も人気のあるプログラミング言語の1つになる道を開きました。

総括

Python 2とPython 3に関連する潜在的な機会、およびプログラムの主な違いを調べる前に、最近のPythonのメジャーリリースの背景を見てみましょう。

Python 2

2000年後半に公開されたPython 2は、PEP(Python Enhancement Proposal)の実装により、以前のバージョンのPythonよりも透明で包括的な言語開発プロセスを示しました。言語。

さらに、Python 2には、メモリ管理を自動化するサイクル検出ガベージコレクター、文字を標準化するUnicodeサポートの強化、既存のリストに基づいてリストを作成するリスト内包表記など、より多くのプログラム機能が含まれていました。 Python 2の開発が進むにつれて、PythonのタイプとクラスをPythonバージョン2.2の1つの階層に統合するなど、より多くの機能が追加されました。

Python 3

Python 3はPythonの未来と見なされており、現在開発中の言語のバージョンです。 大規模なオーバーホールであるPython 3は2008年後半にリリースされ、以前のバージョンの言語の固有の設計上の欠陥に対処し、修正しました。 Python 3開発の焦点は、コードベースのクリーンアップと冗長性の削除であり、特定のタスクを実行する方法が1つしかないことを明確にしました。

Python 3.0の主な変更点には、printステートメントの組み込み関数への変更、整数の分割方法の改善、Unicodeサポートの強化などがあります。

最初は、言語がPython 2と後方互換性がないため、Python 3が徐々に採用され、使用する言語のバージョンを決定する必要がありました。 さらに、多くのパッケージライブラリはPython 2でのみ使用可能でしたが、Python 3の開発チームがPython 2サポートのサポート終了を繰り返したため、より多くのライブラリがPython 3に移植されました。 Python 3の採用の増加は、現在Python 3サポートを提供しているPythonパッケージの数によって示されます。これには、執筆時点で、最も人気のある360個のPythonパッケージのうち339個が含まれています。

Python 2.7

Python 3.0の2008リリースに続き、2010年7月3日にPython 2.7が公開され、2.xリリースの最後として計画されました。 Python 2.7の背後にある意図は、Python 2.xユーザーがPython 3に機能を移植するのを容易にすることで、両者の間にある程度の互換性を提供することでした。 この互換性サポートには、テスト自動化をサポートするunittest、コマンドラインオプションを解析するargparsecollectionsのより便利なクラスなどのバージョン2.7の拡張モジュールが含まれていました。

Python 2とPython 3.0の初期の反復の間のバージョンとしてのPython 2.7のユニークな位置のため、多くの堅牢なライブラリとの互換性があるため、プログラマーにとって非常に人気のある選択肢として存続しています。 今日、Python 2について話すとき、Python 2.7リリースが最も頻繁に使用されるバージョンであるため、通常はPython 2.7リリースについて言及しています。

ただし、Python 2.7はレガシー言語と見なされており、現在ほとんどがバグ修正で構成されている継続的な開発は2020年に完全に停止します。

主な違い

Python 2.7とPython 3は多くの類似した機能を共有していますが、完全に互換性があると考えるべきではありません。 どちらのバージョンでも優れたコードと便利なプログラムを作成できますが、コードの構文と処理にかなりの違いがあることを理解する価値があります。

以下にいくつかの例を示しますが、Pythonを学習し続けると、より構文上の違いが発生する可能性が高いことに留意してください。

印刷する

Python 2では、printは関数ではなくステートメントとして扱われます。これは、Pythonの他の多くのアクションが実行するために括弧内の引数を必要とするため、一般的な混乱の領域でした。 コンソールでPython2でSammy the Shark is my favorite sea creatureを出力する場合は、次のprintステートメントを使用して出力できます。

print "Sammy the Shark is my favorite sea creature"

Python 3では、print()が明示的に関数として扱われるようになったため、上記と同じ文字列を出力するには、関数の構文を使用して簡単かつ簡単に出力できます。

print("Sammy the Shark is my favorite sea creature")

この変更により、Pythonの構文の一貫性が高まり、異なる印刷機能間での変更が容易になりました。 便利なことに、print()構文はPython 2.7との下位互換性もあるため、Python 3print()関数はどちらのバージョンでも実行できます。

整数による除算

Python 2では、小数点なしで入力した数値は、integerと呼ばれるプログラミング型として扱われます。 一見、これはプログラミングタイプを処理する簡単な方法のように見えますが、整数を除算しようとすると、次のように小数点以下の桁数(floatと呼ばれる)で答えが得られることがあります。

5 / 2 = 2.5

ただし、Python 2では、整数は厳密に型指定されており、直感的に理解できる場合でも、小数点以下の桁数を持つ浮動小数点数には変更されません。

除算/シンボルの両側にある2つの数値が整数の場合、Python 2はfloor divisionを実行するため、商xの場合、返される数値は%以下の最大の整数になります。 (t3)s。 つまり、5 / 2を記述して2つの数値を除算すると、Python 2.7は2.5以下の最大の整数(この場合は2)を返します。

a = 5 / 2
print a
Output2

これをオーバーライドするには、5.0 / 2.0のように小数点以下の桁数を追加して、期待される回答2.5を取得します。

Python 3では、次のように、integer divisionがより直感的になりました。

a = 5 / 2
print(a)
Output2.5

5.0 / 2.0を使用して2.5を返すことはできますが、フロア分割を行う場合は、次のように//のPython3構文を使用する必要があります。

b = 5 // 2
print(b)
Output2

Python 3でのこの変更により、整数による除算がはるかに直感的になり、Python 2.7との下位互換性がnotある機能です。

Unicodeのサポート

プログラミング言語がstringタイプ(つまり、文字のシーケンス)を処理する場合、コンピューターが数値を文字やその他の記号に変換できるように、いくつかの異なる方法で処理できます。

Python 2はデフォルトでASCIIアルファベットを使用するため、"Hello, Sammy!"と入力すると、Python2は文字列をASCIIとして処理します。 ASCIIは、さまざまな拡張形式でせいぜい数百文字に制限されていますが、ASCIIは文字、特に英語以外の文字をエンコードするための非常に柔軟な方法ではありません。

現代的および歴史的なスクリプトと記号セット全体で128,000文字以上をサポートする、より用途が広く堅牢なUnicode文字エンコードを使用するには、u"Hello, Sammy!"と入力する必要があります。

Python 3はデフォルトでUnicodeを使用します。これによりプログラマーの開発時間を節約でき、より多くの文字を簡単に直接プログラムに入力して表示できます。 Unicodeは言語の文字の多様性と絵文字の表示をサポートしているため、デフォルトの文字エンコードとして使用することで、世界中のモバイルデバイスが開発プロジェクトで容易にサポートされるようになります。

ただし、Python3コードをPython2と下位互換性を持たせたい場合は、文字列の前にuを保持できます。

継続的な開発

Python 3とPython 2の最大の違いは構文上の違いではありませんが、Python 2.7が2020年に継続的なサポートを失い、Python 3はより多くの機能とバグ修正で開発され続けるという事実です。

最近の開発には、formatted string literalsclass creationのより単純なカスタマイズ、および行列乗算を処理するためのよりクリーンな構文方法が含まれています。

Python 3の継続的な開発は、開発者が問題をタイムリーに修正することに頼ることができることを意味し、プログラムはより多くの機能が時間とともに組み込まれ、より効果的になります。

考慮すべき追加のポイント

Pythonを新しいプログラマーとして、またはPython言語を初めて使用する経験豊富なプログラマーとしてPythonを始めた人は、言語の学習で達成したいことを検討する必要があります。

セットプロジェクトを念頭に置かずに学習したい場合は、おそらくPython 3は引き続きサポートおよび開発され、Python 2.7はサポートされないことを考慮する必要があります。

ただし、既存のプロジェクトへの参加を計画している場合、プロジェクトが使用するパッケージが異なるバージョン、およびプロジェクトの実装の詳細は何ですか。

念頭に置いてプロジェクトを開始する場合、どのパッケージが使用可能で、どのバージョンのPythonと互換性があるかを調査する価値があります。 上記のように、以前のバージョンのPython 3は、Python 2のバージョン用に構築されたライブラリとの互換性が低くなりましたが、多くはPython 3に移植されているか、今後4年間でそうすることを約束しています。

結論

Pythonは、学ぶべき汎用性が高く、十分に文書化されたプログラミング言語であり、Python 2とPython 3のどちらを使用するかを選択することで、魅力的なソフトウェアプロジェクトに取り組むことができます。

いくつかの重要な違いがありますが、いくつかの微調整を行ってPython 3からPython 2に移行するのはそれほど難しくありません。Python2.7では、特に開始時に特にPython 3コードを簡単に実行できることがわかります。 このプロセスの詳細については、チュートリアルHow To Port Python 2 Code to Python 3をお読みください。

開発者とコミュニティの注目がPython 3に集中するにつれて、言語はより洗練され、プログラマーの進化するニーズに沿ったものになり、Python 2.7へのサポートが少なくなることに留意することが重要です。

Related