Python3.x は Python の革命的なアップグレードであり、以前の多くの機能が廃止され、新しい機能が導入されています。 1.x および 2.x の古いコードと完全な互換性はありません。
Python2.x には下位互換性があり、最新バージョンは Python 2.7 です。その中で、Python が 3.X にスムーズに移行できるようにするためにバージョン 2.6 と 2.7 がリリースされ、3.X の機能もいくつか追加されました。
現在、多くのライブラリは 3.x をサポートしておらず (例: Django、wxPython)、ほとんどのアプリケーションは依然として 2.x に基づいています。初心者はバージョン 2.7 を使用することをお勧めします。
Python 3.X と 2.X の主な違いは次のとおりです
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 as キーワード、True、False、None を追加します
4) 整数の除算は浮動小数点数を返します。整数の結果を取得するには、//
を使用してください。
5) 非ローカルステートメントを追加します。ペリフェラル (非グローバル) 変数は、noclocal x
を使用して直接割り当てることができます
6) print ステートメントを削除し、print() 関数を追加して同じ機能を実現します。同じことが exec ステートメントにも当てはまり、 exec() 関数に変更されました
例:
2.X: 「答えは」を出力、2*2
3.X: print("答えは", 2*2)
2.X: x を印刷、
3.X: print(x, end=" ") # スペースを使用して行を置換します
3.X: print()
2.X: print >>sys.stderr、「致命的エラー」
3.X: print("致命的なエラー", file=sys.stderr)
3.X: print((x, y)) # print(x, y) とは異なります!
7) x
2.X:guess = int(raw_input('整数を入力してください : ')) # キーボード入力の読み方
3.X:guess = int(input('整数を入力してください: '))
9) タプルパラメータのアンパックを削除します。 def(a, (b, c)):pass
のような関数を定義することはできません
10) 新しい 8 進ワード変数、oct() 関数がそれに応じて変更されました。
2.Xの方法は以下の通りです:
>>>0666
438
>>> オクト(438)
「0666」
3.X は次のようになります:
>>>0666
SyntaxError: 無効なトークン (
>>>0o666
438
>>> オクト(438)
「0o666」
11) バイナリリテラルと bin() 関数を追加しました
>>> ビン(438)
「0b110110110」
>>> _438 = '0b110110110'
>>> _438
「0b110110110」
12) 拡張された反復可能なアンパック。 Py3で。
オブジェクトとシーケンスは反復可能です。
13) 新しい super() は super() にパラメーターを渡すことができなくなりました。
>>> クラス C(オブジェクト):
def __init__(self, a):
print('C', a)
>>> クラス D(C):
def __init(self, a):
super().__init__(a) # パラメーターなしで super() を呼び出します
>>>D(8)
C8
<__main__.D オブジェクト、0x00D7ED90>
14) 新しいメタクラス構文:
クラス Foo(*bases, **kwds):
パス
15) クラスデコレータをサポートします。使用法は関数デコレータと同じです:
>>> def foo(cls_a):
def print_func(self):
print('Hello, world!')
cls_a.print = print_func
cls_a を返す
>>> @foo
クラスC(オブジェクト):
パス
>>> C().print()
こんにちは、世界!
クラスデコレータを使用すると、ジャコウネコを王子様に変えるトリックを実行できます。詳細については、PEP 3129 を参照してください
4. 文字列とバイト文字列
1) 現在、文字列のタイプは str の 1 つだけですが、これは Unicode の 2.x バージョンとほぼ同じです。
5.データ型
1) Py3.X では long 型が削除され、整数型は int の 1 つだけになりましたが、2 と同様に動作します。
2) バージョン 2.X のオクテット文字列に対応する新しいバイト型が追加されました。バイト リテラルの定義方法は次のとおりです。
>>> b = b'中国'
>>> タイプ(b)
<「バイト」と入力>
str オブジェクトと bytes オブジェクトは、.encode() (str -> bytes) または .decode() (bytes -> str) メソッドを使用して相互に変換できます。
>>> s = b.decode()
>>>
「中国」
>>> b1 = s.encode()
>>>
「中国」
3) dict の .keys()、.items、および .values() メソッドは反復子を返しますが、以前の iterkeys() およびその他の関数は廃止されました。こちらも同時に削除
dict.has_key() を in
に置き換えます
6.オブジェクト指向
1) 抽象基本クラス (抽象基本クラス、ABC) を導入します。
2) コンテナクラスとイテレータクラスが ABC 化されているため、cellections モジュールには Py2.5 よりも多くの型があります。
>>> コレクションをインポートします
>>> print('n'.join(dir(collections)))
呼び出し可能
コンテナ
ハッシュ可能
アイテムビュー
反復可能
イテレーター
キービュー
マッピング
マッピングビュー
可変マッピング
可変シーケンス
可変セット
名前付きタプル
シーケンス
セット
サイズあり
値ビュー
__全員__
__組み込み__
__doc__
__ファイル__
__名前__
_abcoll
_アイテムゲッター
_シス
デフォルト辞書
デク
さらに、数値型も ABC サイズになります。これら 2 つの点については、PEP 3119 および PEP 3141 を参照してください。
3) イテレータの next() メソッドの名前が __next__() に変更され、イテレータの __next__() メソッドを呼び出すための組み込み関数 next() が追加されました
4) 抽象メソッド (プロパティ) の記述をより便利にするために、2 つのデコレーター @abstractmethod と @abstractproperty が追加されました。
7.異常
1) すべての例外は BaseException から継承され、StardardError は削除されます
2) 例外クラスのシーケンス動作と .message 属性を削除しました
3) raise Exception、args 構文の代わりに raise Exception(args) を使用します
4) 例外をキャッチするための構文の変更。Py2.5 では、例外インスタンスを識別するために as キーワードが導入されています:
>>> 試してください:
… NotImplementedError('Error') を発生させます
...NotImplementedError を除く、エラー:
... ... エラーメッセージを印刷します
...
エラー
Py3.0 の場合:
>>> 試してください:
NotImplementedError('エラー') を発生させる
エラーとして NotImplementedError を除く: #これに注意してください
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) トークン化モジュールはバイトを扱うようになりました。メインのエントリ ポイントは、generate_tokens ではなく、tokenize.tokenize() になりました
9.その他
1) xrange() の名前が range() に変更されました。 range() を使用してリストを取得したい場合は、明示的に呼び出す必要があります:
>>> リスト(範囲(10))
[0、1、2、3、4、5、6、7、8、9]
2) bytes オブジェクトはハッシュできず、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
() 関数は削除されました
hasattr() を使用して callable() を置き換えることができるようになりました。 hasattr() の構文は次のとおりです: hasattr(string, '__name__')
4) string.letters および関連する . lowercase および .uppercase は削除されます。代わりに string.ascii_letters などを使用してください
5) x < y を比較できない場合、TypeError 例外がスローされます。バージョン 2.x は擬似ランダムのブール値を返します
6) __getslice__ シリーズのメンバーは放棄されます。 a[i:j] は、コンテキストに応じて a.__getitem__(slice(I, j)) または __setitem__ および
に変換されます。
__delitem__ が
を呼び出します
7) ファイル クラスは Py2.5 で非推奨になりました:
>>>
<「ファイル」と入力>
Py3.X の場合:
>>>
トレースバック (最後の呼び出し):
ファイル「
ファイル
NameError: 名前「ファイル」が定義されていません
以上がPython3.xとPython2.xの違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。