Python を学ぼうとしている人は、Python には現在 Python2 と Python3 という 2 つのバージョンがあるという混乱を感じるでしょう。Python2 と Python3 の違いは何ですか? 2 つのバージョンのうちどちらを学べばよいのでしょうか?
python3 と python2 は互換性がなく、その違いは比較的大きいです。python3 には下位互換性がありませんが、ほとんどのコンポーネントと拡張機能は python2 に基づいています。現在、ほとんどの実用的なアプリケーションは当面 Python 3 を考慮せず、2/3 と互換性のあるコードを書くことに注意を払う場合があります。主に Python2 を使用して新しいコードを作成する場合は、将来 Python3 に移行する可能性を考慮する必要があります。統計によると、現在 10% が Python 3 を使用しており、20% が Python 2 と Python 3 の両方を使用しており、Python 2 の方が多く使用されており、70% は Python 2 を使用しています。
実際、Python は Linux で最も一般的に使用されているソフトウェアの 1 つですが、Linux の現在のバージョンのほとんどは依然として python2 を使用しています。さらに、Linux では python2 に依存するプログラムが増えているため、Python3 に置き換える必要があります。 python2 が開発されて主流になるには、さらに数年かかるでしょう。仕事を見つけるためにまだ Python 2 を学習している場合、Python 2 を学習した後に Python 2 から python3 に切り替えることは難しくありません。
長々と話しましたが、Python2 と Python3 の違いは何ですか?
1. パフォーマンス
Py3.0 は、pystone ベンチマークの実行が Py2.5 より 30% 遅くなります。 Guido 氏は、Py3.0 には最適化の余地が大きく、文字列演算と整数演算で優れた最適化結果を達成できると考えています。
Py3.1 のパフォーマンスは Py2.5 より 15% 遅く、まだ改善の余地がたくさんあります。
2. エンコーディング
Py3.X ソース コード ファイルは、デフォルトで utf-8 エンコーディングを使用します
3. 構文
1) <> を削除します。 、すべてを !=
2) に変更し、「 」を削除し、すべてに repr()
3 を使用します。キーワード as および with、および True、False、None
を追加します。4) 整数の除算は浮動小数点数を返します。整数の結果を取得するには、//
5) 非ローカル ステートメントを追加します。 noclocal x を使用して周辺 (非グローバル) 変数を直接割り当てます。
6) print ステートメントを削除し、print() 関数を追加して同じ機能を実現します。同じことが exec ステートメントにも当てはまり、 exec() 関数に変更されました
7) x と y の型が一致しない場合の、x 8) 入力関数が変更され、raw_input が削除され、input: 9) タプル パラメーターのアンパックが変更されました。削除されました。この関数は、def(a, (b, c)):pass 10) のように定義することはできません。新しい 8 進ワード変数である oct() 関数は、それに応じて変更されました。 11) バイナリ リテラルと bin() 関数を追加しました。 12) 反復可能なアンパックを拡張しました。 Py3で。 13) 新しい super()。super() にパラメータを渡すことはできなくなりました。 14) 新しいメタクラス構文: 15) クラス デコレータをサポートします。 4. 文字列とバイト文字列 1) 現在、文字列には str という 1 つの型しかありませんが、これは Unicode の 2.x バージョンとほぼ同じです。 2) バイト列については、「データ型」の 2 番目の項目を参照してください。 5、データ型 1) Py3.X では、long 型が削除されました。現在、整数型は int の 1 つだけですが、long 2 の 2.X バージョンのように動作します。追加されたバイト型 #6、オブジェクト指向 # 1 ) 抽象基本クラス (抽象基本クラス、ABC) を導入します。 2) コンテナ クラスとイテレータ クラスは ABC サイズであるため、cellections モジュールには Py2.5 よりも多くの型があります。 3) イテレータの next() メソッドの名前が __next__() に変更され、イテレータを呼び出すための組み込み関数 next() が追加されました 4) @abstractmethod と @ は追加された abstractproperty には 2 つのデコレータがあり、抽象メソッド (プロパティ) の記述がより便利になります。 7. 例外 1) すべての例外は BaseException から継承され、StardardError は削除されます 2) 例外クラスのシーケンス動作と .message 属性は削除されます 3) raise Exception、args 構文の代わりに raise Exception(args) を使用します。 4) 例外をキャッチするための構文の変更。例外インスタンスを識別するために as キーワードが導入されました。 5 ) __context__ がバージョン 3.0a1 に実装されていないため、例外チェーンが発生します8. モジュールの変更 2) imageop モジュールを削除しました 3) audiodev、Bastion、bsddb185、例外、linuxaudiodev、md5、imeWriter、mimify、popen2、rexec、sets、sha、stringold、strop、sunaudiodev を削除しました、タイミングおよび xmllib モジュール 4) bsddb モジュールを削除しました (別途リリースされ、Oracle Berkeley DB の Python "バインディング" から入手可能) 5) 新しいモジュールを削除しました 6) os.tmpnam() および os.tmpfile() 関数は tmpfile モジュールに移動されました 7) tokenize モジュールはバイトを扱うようになりました。メインのエントリ ポイントは、generate_tokens ではなく、tokenize.tokenize() 9. その他 2) Bytes オブジェクトはハッシュできず、b. lower()、b.strip()、および b.split() メソッドをサポートしません 3) zip( )、map ()、filter() はどちらもイテレータを返します。 4) string.letters および関連する . lowercase および .uppercase は削除されたため、代わりに string.ascii_letters を使用してください。 5) x < y を比較できない場合、TypeError 例外がスローされます 6) __getslice__ シリーズのメンバーは放棄されます。 7) ファイルクラスは放棄されました
1) cPickle モジュールが削除され、代わりに pickle モジュールを使用できます。最終的には、透過的で効率的なモジュールが完成するでしょう。
1) xrange() の名前が range() に変更されました。range() を使用してリストを取得したい場合は、 、明示的に呼び出す必要があります
以上が初心者に最適な Python のバージョンはどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。