検索すると、Python には Python2 と Python3 という 2 つの主要なバージョンがあることがわかりますが、Python は他の言語とは異なり、下位互換性があり、Python3 には下位互換性がありませんが、ほとんどのコンポーネントと拡張機能は Python2 に基づいています。 python2とpython3の違いをまとめてみましょう。
1. パフォーマンス
Py3.0 は pystone ベンチマークを Py2.5 よりも 30% 遅く実行します。 Guido 氏は、Py3.0 には最適化の余地が大きく、文字列演算と整数演算で良好な最適化結果を達成できると考えています。
Py3.1 のパフォーマンスは Py2.5 より 15% 遅く、まだ改善の余地がたくさんあります。
2. エンコーディング
Py3. (中国)
china
3. 文法
1) <> を削除し、!= を使用します
2) ``を削除し、すべてで repr() を使用します
3 ) キーワード as と with、および True、False、None を追加します
4) 整数の除算は浮動小数点数を返します。整数の結果を取得するには、// を使用してください
5) 非ローカル ステートメントを追加します。 noclocal x を使用して周辺 (非グローバル) 変数を直接割り当てます
6) print ステートメントを削除し、同じ機能を実現するために print() 関数を追加します。同じことが exec ステートメントにも当てはまり、 exec() 関数に変更されました
例:
2.X: print "答えは", 2*2
3.X: print("The答えは", 2* 2)
2.
2. 3.2.
7) 変更 x と y の型が一致しない場合、x 8) input 関数が変更され、raw_input が削除され、input に置き換えられました: 2 .X:guess = int(raw_input('Enter an integer : ')) # How toキーボード入力を読み取ります 3.X:guess = int(input('整数を入力してください : ')) 9) タプルパラメータのアンパックを削除します。この関数は def(a, (b, c)):pass のように定義することはできません 10) 新しい 8 進ワード変数である oct() 関数はそれに応じて変更されました。 2. 3.X は次のようになります: >> ;> 0666 SyntaxError: 無効なトークン ( >>> 438 ; oct(438) '0o666' 11) バイナリリテラルと bin() 関数を追加しました >>> bin(438) '0b110110110' >>> _438 = '0b110110110' > >> _438 '0b110110110' 12) 拡張された反復可能なアンパック。 Py3で。 U13) 新しい super () は super () のパラメータを渡すことができなくなりました、 & gt & gt & gt; class c (object): def __init __ (seld, a): ('c (' c ('c (' c ('c ', a) >>> class D(C): def __init(self, a): raise NotImplementedError('Error') エラーとして NotImplementedError を除く: #注意这个as print(str(error)) エラー 5) __context__ 在 3.0a1 バージョン本中没有实现 8. モジュールの変更点 1) cPickle モジュールが削除され、pickle モジュールに置き換えることができます。最終的には、透過的で効率的なモジュールが完成するでしょう。 2) imageop モジュールを削除 3) audiodev、Bastion、bsddb185、例外、linuxaudiodev、md5、MimeWriter、mimify、popen2、 rexec、sets、sha、stringold、strop、sunaudiodev、timing および xmllib モジュールを削除 4) bsddb モジュールを削除しました (個別にリリースされ、http://www.jcea.es/programacion/pybsddb.htm から入手可能) 5) 新しいモジュールを削除しました 6) os.tmpnam () および os.tmpfile( ) 関数は tmpfile モジュールに移動されました 7) tokenize モジュールはバイトで動作するようになりました。メインのエントリ ポイントは、generate_tokens ではなくなり、tokenize.tokenize() 9. その他 1) range() を使用してリストを取得したい場合は、呼び出す必要があります。明示的に: >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2) バイトオブジェクトはハッシュできません。 b . lower()、b.strip()、b.split() メソッドもサポートしていませんが、後者の 2 つは b.strip(b' ntr f') と b.split(b' ') 同じ目的を達成するため 3) zip()、map()、filter() はすべてイテレータを返します。 apply()、callable()、coerce()、execfile()、reduce() および reload