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

前書き

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

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

1980年代後半に開発され、1991年に最初に公開されたPythonは、コミュニティでまだ非常に活発なGuido van Rossumによって作成されました。 ABCプログラミング言語の後継として考案されたPythonの最初のイテレーションには、既に例外処理、https://www.digitalocean.com/community/tutorials/how-to-define-functions-in-python-3 [functions]が含まれていました。 https://www.digitalocean.com/community/tutorials/understanding-inheritance-in-python-3 [継承のあるクラス]。 comp.lang.pythonという重要なUsenetニュースグループディスカッションフォーラムが1994年に結成されたとき、Pythonのユーザーベースが成長し、Pythonがオープンソース開発で最も人気のあるプログラミング言語の1つになる道を開きました。

総括

Python 2とPython 3に関連する潜在的な機会、および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 +、コマンドラインオプションの解析用の + argparse +、および `+ collections +`のより便利なクラスなど、バージョン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の他の多くのアクションが実行するために括弧内の引数を必要とするため、典型的な混乱の領域でした。 Python 2でコンソールに「 Sammy the Shark is my favour 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 3の ` print()+`関数はどちらのバージョンでも実行できます。

整数による除算

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

5 / 2 = 2.5

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

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

a = 5 / 2
print a
Output2

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

Python 3では、https://www.digitalocean.com/community/tutorials/how-to-do-math-in-python-3-with-operators#multiplication-and-division [integer division]がより直感的になりました。に:

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

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

b = 5 // 2
print(b)
Output2

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

Unicodeのサポート

プログラミング言語が* https://www.digitalocean.com/community/tutorial_series/working-with-strings-in-python-3 [string] *タイプ(つまり、文字のシーケンス)を処理するとき、コンピュータが数字を文字やその他の記号に変換できるようにするためのいくつかの異なる方法。

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

現代的で歴史的なスクリプトやシンボルセット全体で128,000以上の文字をサポートする、より汎用性が高く堅牢なUnicode文字エンコーディングを使用するには、「+ u + Hello、Sammy!」+ `と入力し、接頭辞「+ u +」ユニコード用。

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

ただし、Python 3コードをPython 2と下位互換にする場合は、文字列の前に `+ u +`を保持できます。

継続的な開発

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

最近の開発には、https://www.digitalocean.com/community/tutorials/how-to-use-string-formatters-in-python-3 [フォーマットされた文字列リテラル]、https://www.digitaloceanのより簡単なカスタマイズが含まれています。 com / community / tutorials / how-to-construct-classes-and-define-objects-in-python-3 [class 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コードを簡単に実行できることがわかります。 このプロセスの詳細については、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-port-python-2-code-to-python-3[Python 2コードの移植方法]をご覧ください。 Python 3]。

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

前の投稿:FreeBSD 11.0にGitをインストールする方法
次の投稿:Ubuntu 16.04でトランスポーターを使用してMongoDBからElasticsearchに変換されたデータを同期する方法