ディレクトリ
プリント
- Python2.7は、印刷の機能ではありません
- 印刷機能であるのpython3。
ユニコード
- Pythonの2の代わりにバイト型の、単独のASCII列str()タイプ、Unicodeを()でした。
- バイトByteArrayとして定義:Pythonの3が、我々は最終的にはUnicode(UTF-8)文字列だけでなく、クラスバイトを持っています。
Python3.Xソースファイルが作るデフォルトのUTF-8エンコーディングを使用しているので、次のコードは有効です。
>>> 中国 = 'china'
>>>print(中国)
china
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
'我爱北京天安门'
除算
他の言語より部門のPythonはルールの非常に複雑なセットがあり、非常に高いです。Pythonの2つの事業者における除算、/と//
すべて/除算のファースト:
Pythonの2.xの/部門で、我々はほとんどの言語に精通しているだけのように、Java(登録商標)Cのようなああああ分割のほぼ整数結果は整数、小数部分が完全に無視され、10進浮動小数点除算は、取得の一部残ります浮動小数点数の結果。
Pythonの3.xのIN /分割は、整数間の分割のために、浮動小数点結果はなりませんでした。
Pythonの2.xの:
>>> 1 / 2
0
>>> 1.0 / 2.0
0.5
Pythonの3.xの:
>>> 1/2
0.5
//部門では、この分割は、分割床と呼ばれ、床操作が自動的に除算の結果だろう、それは、Python 2.xとPythonの3.xで同じです
Pythonの2.xの:
>>> -1 // 2
-1
python 3.xの:
>>> -1 // 2
-1
小数部分を破棄しないことに注意してください、しかし、床操作の実装、あなたは整数部分をインターセプトしたい場合、あなたは数学のモジュール関数TRUNCを使用する必要があります
python 3.xの:
>>> import math
>>> math.trunc(1 / 2)
0
>>> math.trunc(-1 / 2)
0
異常な
Pythonで3異常処理も若干変更し、我々は今はPython 3でのキーワードとして使用します。
EXC除いて作られた例外をキャッチするための構文は、VARはVARとしてEXC以外に変更しました。
VARとして(EXC1、EXC2)を除き、構文は、同時に複数のカテゴリの例外をキャッチすることができます。Pythonの2.6は、両方の構文をサポートしています。
- 2.xの時代では、唯一のBaseExceptionオブジェクトから継承された3.xの時代に直接スローすることができるオブジェクトのすべての種類は、スローすることができますされています。
- 2.xのraise文は、3.xが直接コンストラクタは、オブジェクトをすることができスロー呼び出すこの素晴らしい作品の文言をキャンセルし、スローオブジェクトタイプとパラメータを区切るためにコンマを使用しています。
2.xの時代、そのプログラムのエラーに加えて、コードの異常はなく、多くの場合、共通の制御構造が何をすべきいくつかのことをやる、それが3.xの中で見ることができて、設計者は、例外がより忠実になるよう、そして唯一のエラーで異常なキャプチャ声明に対処するための状況。
xrange
Pythonで繰り返しオブジェクトを作成すると、2()の使用は非常に人気のあるXRANGE。たとえば、次のようにループまたはリスト/設定/推論辞書について。
性能は、発電機のようなものである(例えば、「遅延評価」)。しかし、これはxrange、反復可能あなたが横切ることができる無限、無制限な手段です。
理由は、その遅延評価の、あなたはそれを数回を通過する必要がある場合、はxrange()関数()より高速(例えばforループ)比範囲。最初から発電機が毎回のでそれにもかかわらず、反復の比較は、反復は、あなたが何回か繰り返すことが推奨されていません。
Pythonの3では、範囲は()はxrangeのようなものである()は、特定のはxrange()関数がもはや存在しない達成するように(xrangeの中のPython 3(IN)例外名をスローします)。
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
Pythonの2
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
Pythonの3
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
print(xrange(10))
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-5-5d8f9b79ea70> in <module>()
----》 1 print(xrange(10))
NameError: name 'xrange' is not defined
進リテラル表現
進数0777の元の形態を使用することができない、0o777書き込む必要があり、バイナリ0b111を書き込まなければなりません。
加えビン()関数は、バイナリ文字列に整数に変換するために使用されます。Pythonの2.6は、両方の構文をサポートしています。
Pythonの3.xの、進リテラルの唯一の方法では、それが0o1000です。
Pythonの2.xの
>>> 0o1000
512
>>> 01000
512
python 3.xの
>>> 01000
File "<stdin>", line 1
01000
^
SyntaxError: invalid token
>>> 0o1000
512
不等式演算子
Pythonの2.xのを2で書かれていません等しい!=と<>
Pythonの3.xのを書くために、<>のみ!=の方法で削除されますが、幸い、私は使用しない<>習慣
削除されたのrepr式はPython 2.x 中反引号
のrepr関数として機能します
``文言で取り外したPython 3.xのは、唯一の使用のrepr機能を可能にする、そうすることの目的は、コードがより明確に見えるようにするのですか?しかし、私は一般た場合にのみ、デバッグに使用、少しチャンスのreprを感じ、時間や使用文字列strの機能のほとんどは、オブジェクトを記述するために。
def sendMail(from_: str, to: str, title: str, body: str) -> bool:
pass
複数のモジュールの名前が変更されている(記載PEP8)
旧称 | 新しい名前 |
---|---|
_winreg | winregを |
ConfigParser | ConfigParser |
copy_reg | copyreg |
キュー | キュー |
SocketServer | socketserver |
repr | リプロ |
StringIOモジュールは、現在、新たなIOモジュールに組み込まれています。新しい、MD5、gopherlibモジュールが削除されます。Pythonの2.6は、新たなIOモジュールをサポートしています。
httplib、BaseHTTPServer、CGIHTTPServer、SimpleHTTPServer、クッキー、cookielib HTTPは、パッケージに組み込まれています。
exec文、唯一のexec()関数をキャンセル。Pythonの2.6はサポートのexec()関数を持っています。
データの種類
Py3.Xは、CPythonのソースコードであるため、我々は表向きのint実際PyLongObject型今、そこだけ1つの整数--intがあるが、それは長いの2.Xバージョンのように振る舞い、ロングタイプを削除しましたそう、実際にはPy3.xは、だけlong型をint型を削除しました。
8文字列バージョン2.x、次のようにリテラルバイトの定義に対応するバイトの新しいタイプ:
>>> b = b'china'
>>> type(b)
<type 'bytes'>
( - >バイトの文字列)または.decode()(バイト - > STR)STRバイトオブジェクトとオブジェクトが.encode()を使用することができる相互変換方法。
>>> s = b.decode()
>>> s
'china'
>>> b1 = s.encode()
>>> b1
b'china'
- .keysをのdict()。項目及び.values()メソッドは、イテレータを返すが、iterkeys()関数等が廃棄される前に。一方、同様に除去dict.has_key()は、その中でそれを交換してください。