Latest web development tutorials

バージョン3 .XとPython2.x差

多くの場合、Pythonの3000、または単にPy3kと呼ばれるのPython 3.0のバージョン、。 Pythonの以前のバージョンに関しては、これはメジャーアップグレードです。

あまりにも多くの負担を持参しないようにするためには、Pythonの3.0は下位互換性の設計で考慮されません。

多くのプログラムのためのPythonの設計以前のバージョンでは、Python 3.0で正常に実行されません。

アカウントにはPython 3.0への移行を取って、基本的な構文とライブラリを使ってPython 2.xの中間バージョンとして既存のプログラムはPython 2.6の世話をするためにとPython 3.0は、関数の構文の一部を使用することができます。

新しいプログラムは、Python 3.0では、Pythonのバージョンの構文を使用することをお勧めします。

実行環境は、Python 3.0またはプログラム自体をインストールすることはできませんしない限り、サードパーティのライブラリのPython 3.0の使用をサポートしていません。 現在サポートされていないサードパーティのライブラリのPython 3.0は、ツイスト、py2exe、PILなどです。

ほとんどのサードパーティのライブラリは、3.0互換性のあるバージョンをPYTHONしようとしています。 すぐにはPython 3.0を使用していない場合、また、プログラムの互換性のPython 3.0バージョンの開発を推奨し、その後のPython 2.6を使用して、Pythonの2.7が実行されます。

Pythonの3.0での変更点は以下の分野で主に次のとおりです。


印刷機能

print文を印刷()関数に置き換え、なくなっています。 一部ではPython 2.6とPython 2.7のサポート、印刷構文のこの形。 Pythonの2.6とPython 2.7の内部では、3つの形式が等価です。

print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数

しかし、Pythonの2.6は、実際には新しいプリント()構文をサポートしています:

from __future__ import print_function
print("fish", "panda", sep=', ')

ユニコード

Pythonの2は、ASCII列str()タイプ、ユニコード()だけではなく、バイトのタイプを持っていました。

バイト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部門、ルールの非常に複雑なセットがあります。 2つの演算子を持つ部門でのPython、および/ //

まず、/本部:

私たちのほとんどは、Javaなどの言語に精通しているだけのようなPython 2.xの/部門でああCは整数、小数部分が完全に無視された整数の除算の結果と同様であるああ、10進浮動小数点除算は、getの一部のままになります結果浮動小数点数。

python 3.xの/部門ではもはやそうしないと、整数の間の分割のために、結果が浮動小数点数になります。

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は、両方の構文をサポートしています。

  • 1. 2.xの時代、唯一のBaseExceptionオブジェクトから継承された3.xの時代に直接スローすることができるすべての種類のオブジェクトは、スローされる可能性があります。
  • 2. 2.xのraise文は、別のオブジェクト型およびパラメータにカンマをスローし、3.xが直接コンストラクタは、オブジェクトがすることができますスロー呼び出すこの素晴らしい文言をキャンセルしました。

2.xの時代には、その手続き上のエラーに加えて、コードの異常だけでなく、多くの場合、見ることができ3.xでは、設計者が唯一のエラーでより具体的な異常変化を行う必要がありますいくつかの一般的な制御構造を作るのですか処理するためのステートメントをキャッチするために、例を除いて。


xrange

xrange()使用中のPython 2の繰り返しオブジェクトを作成することは非常に人気があります。 たとえば、次のforループまたはリスト/コレクション/辞書内包表記。

この性能は非常に画像生成(例えば「遅延評価」)です。 しかし、xrangeの-のiterableは、あなたが通過できる無限、無限の手段です。

理由は、その遅延評価のだけでなく、一度それを横断することができない場合、はxrange()関数比の範囲()より高速(サイクル用など)。 それにもかかわらず、一回の反復に比べ、反復は最初から発電するたびので、あなたは何回か繰り返すことが推奨されていません。

Pythonの3では、範囲は()はxrangeのようなものです()は、特定のはxrange()関数がもう存在しない達成しないように(Pythonでは3はxrange()は例外名がスローされます)。

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

オクタルリテラル表現

8進数は、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を削除しました

バッククォート ``のrepr関数内のPython 2.xでは、の役割に相当します

のみのrepr機能許さ ``の表記を、ドロップするのPython 3.xでは、そうすることの目的は、コードがより明確に見えるようにするのですか? しかし、私は、それはデバッグに使用されている場合にのみ、通常、めったにと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 reprlib

StringIOモジュールが新しいIOモジュールに組み込まれています。 新しい、MD5、gopherlibモジュールが削除されます。 Pythonの2.6は、新たなIOモジュールをサポートしています。

httplib、BaseHTTPServer、CGIHTTPServer、SimpleHTTPServer、クッキーは、HTTPパッケージに組み込むことがcookielib。

exec文、のみのexec()関数をキャンセルします。 Pythonの2.6はサポートのexec()機能を有しています。


5.データ型

1)Py3.Xは、今そこにだけ1つの整数--intであるが、それは長いの2.Xバージョンと同じように動作し、ロングタイプを削除しました

2)を追加しましたが、8シリーズの2.Xバージョンに対応する入力し、次のようにバイトリテラルの方法がある定義バイト:

>>> b = b'china' 
>>> type(b) 
<type 'bytes'> 

お互いに - (> strのバイト)メソッド - (>バイト文字列)または.decode()strのオブジェクトとバイトのオブジェクトが.encode()を使用することができます。

>>> s = b.decode() 
>>> s 
'china' 
>>> b1 = s.encode() 
>>> b1 
b'china' 

3).keysの辞書()、。アイテムや.values()メソッドは、以前のiterkeys(一方、イテレータを返します)およびその他の機能は破棄されます。 同時にdict.has_key(そこに削除)、その中でそれを置き換えます。