Python2.x と 3.x のバージョンの違い
Python バージョン 3.0 は、Python 3000、または短縮して Py3k と呼ばれることがよくあります。これは、Python の以前のバージョンと比較して大幅なアップグレードです。
過度の負担をもたらさないように、Python 3.0 は下位互換性を考慮して設計されていません。
以前の Python バージョン用に設計されたプログラムの多くは、Python 3.0 では適切に実行できません。
既存のプログラムを処理するために、Python 2.6 は基本的に Python 2.x の構文とライブラリを使用する移行バージョンであり、Python 3.0 への移行も考慮されており、一部の Python 3.0 構文と関数の使用が可能です。
実行環境が Python 3.0 をインストールできない場合、またはプログラム自体が Python 3.0 をサポートしていないサードパーティ ライブラリを使用している場合を除きます。現在 Python 3.0 をサポートしていないサードパーティ ライブラリには、Twisted、py2exe、PIL などが含まれます。
ほとんどのサードパーティ ライブラリは、Python 3.0 バージョンとの互換性を保つために懸命に取り組んでいます。 Python 3.0 をすぐに使用できない場合でも、Python 3.0 バージョンと互換性のあるプログラムを作成し、Python 2.6 または Python 2.7 を使用して実行することをお勧めします。
Python 3.0 の変更点は主に次の点です:
print 関数
print ステートメントが廃止され、print() 関数に置き換えられました。 Python 2.6 と Python 2.7 は、この形式の print 構文を部分的にサポートしています。 Python 2.6 と Python 2.7 では、次の 3 つの形式は同等です:
print "fish" print ("fish") #注意print后面有个空格 print("fish") #print()不能带有任何其它参数
ただし、Python 2.6 は実際には新しい print() 構文をサポートしています:
from __future__ import print_function print("fish", "panda", sep=', ')
Unicode
Python 2 には ASCII str() タイプ、unicode() があります。バイト型ではなくシングルです。
さて、Python 3 では、ついに Unicode (utf-8) 文字列と、バイト クラス: byte および bytearrays が追加されました。
Python3.X ソース コード ファイルはデフォルトで utf-8 エンコーディングを使用するため、次のコードが合法になります:
>>> 中国 = 'china' >>>print(中国) china
Python 2. Python の部門は他の言語と比較して非常にハイエンドであり、非常に複雑なルールのセット。 Python の除算には、/ と //
という 2 つの演算子があります。まず、/division:
Python 2.x では、/division は Java や C など、私たちが使い慣れているほとんどの言語に似ています。除算の結果は整数となり、小数部は完全に無視されます。浮動小数点除算では小数部が保持され、浮動小数点の結果が得られます。 Python 3.x/division では、整数間の除算ではこれが行われなくなり、結果も浮動小数点数になります。 Python 2.x:
>>> str = "我爱北京天安门" >>> str '\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8' >>> str = u"我爱北京天安门" >>> str u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'Python 3.x:
>>> str = "我爱北京天安门" >>> str '我爱北京天安门'//division の場合、この除算はフロア除算と呼ばれ、Python 2.x と Python では除算の結果に対してフロア演算が自動的に実行されます。 3 .x は一貫性があります。 python 2.x:
>>> 1 / 2 0 >>> 1.0 / 2.0 0.5python 3.x:
>>> 1/2 0.5小数部分は切り捨てられませんが、切り捨て演算が実行されることに注意してください。小数部分を切り取りたい場合は、trunc 関数を使用する必要があります。 math モジュールのpython 3.x:
>>> -1 // 2 -1
Exceptions
例外処理も Python 3 では若干変更されました。Python 3 では、キーワードとして as を使用するようになりました。
例外をキャッチするための構文が、
excex, varから
excex as var
に変更されました。複数の例外カテゴリを同時にキャッチするには、var として (exc1, exc2) 以外の構文を使用します。 Python 2.6 はすでに両方の構文をサポートしています。
1. 2.x 時代では、すべての種類のオブジェクトを直接スローできます。3.x 時代では、BaseException を継承するオブジェクトのみをスローできます。
2. 2.x の raise ステートメントは、スローされるオブジェクトの型とパラメーターを区切るためにカンマを使用します。3.x では、この奇妙な書き込みメソッドがキャンセルされ、オブジェクトをスローするコンストラクターが直接呼び出されます。
2.の具体的な例外キャッチステートメントは、エラーが発生した場合にのみ使用できます。
xrange
Python 2 では、反復可能なオブジェクトを作成するための xrange() の使用が非常に一般的です。例: for ループまたはリスト/セット/辞書の内包表記。
これはジェネレーター (つまり、「遅延評価」) と非常によく似た動作をします。しかし、この xrange-iterable は無限であり、無限に走査できることを意味します。
その遅延評価により、(for ループのように) 1 回だけ反復する必要がある場合、xrange() 関数は range() よりも高速です。ただし、ジェネレーターは毎回最初から開始されるため、1 回反復するのではなく、複数回反復することはお勧めしません。
Python 3 では、range() は xrange() と同様に実装されるため、専用の xrange() 関数は存在しなくなりました (Python 3 では、xrange() は名前付き例外をスローします)。
>>> -1 // 2 -1
Python 2
>>> import math >>> math.trunc(1 / 2) 0 >>> math.trunc(-1 / 2) 0
Python 3
import timeit n = 10000 def test_range(n): return for i in range(n): pass def test_xrange(n): for i in xrange(n): pass
print 'Python', python_version() print '\ntiming range()' %timeit test_range(n) print '\n\ntiming xrange()' %timeit test_xrange(n) Python 2.7.6 timing range() 1000 loops, best of 3: 433 µs per loop timing xrange() 1000 loops, best of 3: 350 µs per loop
8進数リテラル表現
8進数は0o777として記述する必要があり、元の形式の0777は使用できません。2進数は0b111として記述する必要があります。
整数をバイナリ文字列に変換する新しい bin() 関数が追加されました。 Python 2.6 はすでに両方の構文をサポートしています。
Python 3.x では、8 進リテラルを表す方法は 0o1000 しかありません。
Python 2. <> では、!= を記述する方法は 1 つだけです。幸いなことに、私は Python 2.x の
Repr 式 ``Backticks`` を使用したことがありません。 repr 関数へ
Python 3.x の関数では ` という記述方法が削除され、repr 関数のみが使用できるようになりました。これはコードをわかりやすくするためでしょうか。ただし、repr を使用する機会は非常に少ないと感じます。通常は、文字列を使用してオブジェクトを記述するために str 関数が使用されることがほとんどです。
print('Python', python_version()) print('\ntiming range()') %timeit test_range(n) Python 3.4.1 timing range() 1000 loops, best of 3: 520 µs per loop複数のモジュールの名前が変更されました (PEP8 に従って)
古い名前新しい名前
ConfigParser | |
---|---|
copy_reg | |
キュー | |
ソケットサーバー | |
repr | |