python3とpython2.7の違い

高洛峰
高洛峰オリジナル
2016-11-23 09:10:321633ブラウズ

検索すると、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: 無効なトークン (、行 1)

>>> 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):

. Super () .__ init __ (A) # パラメーターなしで super () を呼び出します

& lt; 14) 構文:

class Foo(*bases, **kwds):

pass

15) はクラス デコレータをサポートします。使用法は関数デコレータと同じです:_a.print = print_func C().print()

こんにちは、世界!

クラスのデコレーターは、王子と交換するためのジャコウネコのトリックをプレイするために使用できます。詳細については、PEP 3129

4 を参照してください。 文字列とバイト文字列

1) 現在、文字列のタイプは str のみですが、これは Unicode の 2.x バージョンとほぼ同じです。

2) バイト文字列については、「データ型」の 2 番目の項目を参照してください。

5. データ型

1) Py3.X では、long 型が削除され、整数型は int 1 つだけになりました。ただし、バージョン 2.X では long のように動作します

2) バージョン 2 の 8 ビット文字列に対応する、新しいバイト型が追加されました。 = b'china'

>>>

Str オブジェクトと bytes オブジェクトは、.encode() (str -> bytes) または .decode() (bytes -> str) メソッドの相互変換を使用できます。

>>> s = b.decode()

>>> s

b'china'

3) dict の .keys() items および .values() メソッドはイテレータを返しますが、以前の iterkeys() およびその他の関数は放棄されました。

dict.has_key() も削除され、

6 で置き換えられます。1) 抽象基本クラス (抽象基本クラス、ABC) を導入します。

2) コンテナクラスとイテレータクラスはABCなので、cellectionsモジュールにはPy2.5よりもはるかに多くの型があります。

>>> コレクションのインポート

>>> print('n'.join(dir(collections)))

呼び出し可能

コンテナ

ItemsView

Iterable

イテレーター

KeysView

MappingView

MutableMapping

MutableSequence

MutableSet

NamedTuple

Sequence

Set

Sized

ValuesView

__all__

__builtins__

__doc__

__file__

__

_abcoll

_itemgetter

_sys

defaultdict

deque

さらに、数値型も ABC サイズです。これら 2 つの点については、PEP 3119 および PEP 3141 を参照してください。

3) イテレータの next() メソッドの名前が __next__() に変更され、イテレータの __next__() メソッドを呼び出すための組み込み関数 next() が追加されました

4) 2 つの @abstractmethod と @abstractproperty が追加されましたデコレータを使用する場合は、抽象メソッド (プロパティ) を記述する方が便利です。

7. 例外

1) すべての例外は BaseException から継承され、StardardError は削除されます

2) 例外クラスのシーケンス動作と .message 属性が削除されます

3) raise の代わりに raise Exception(args) を使用します例外、引数の文法

4) 例外をキャッチするための構文の変更。Py2.5 では、例外インスタンスを識別するために as キーワードが導入されました:

>>> try:

... raise NotImplementedError('Error' )

... NotImplementedError を除く、エラー:

... error.message を出力します

...

Py3.0 のエラー

>>> 試してください:

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

() 関数は削除されました

今では、 hasattr() を使用して callable() hasattr() を置き換えることができます。構文は次のとおりです: hasattr(string, '__name__')

4) string.letters および関連する . lowercase と .uppercase は削除されます。代わりに string.ascii_letters を使用してください。

5) If x < y比較できません。TypeError 例外がスローされます。バージョン 2.x は擬似ランダムのブール値を返します

6) __getslice__ シリーズのメンバーは廃止されました。 a[i:j] は a.__getitem__(slice(I, j)) または __setitem__ に変換され、コンテキストに従って

__delitem__ が呼び出されます

7) ファイル クラスは Py2.5 では非推奨です:

> ;&gt;&lt 'file'&gt;

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。