Python 3とPython 2の違い
10346 ワード
Python 3とPython 2の違い
1.性能
Py3.0 pystone benchmarkを実行する速度比Py 2.5は30%遅い.GuidoはPy 3とする.0は極めて大きな最適化空間があり、文字列と整形操作で良好な最適化結果を得ることができる. Py3.1性能比Py 2.5は15%遅く、まだ大きなアップグレードスペースがあります.
2.コード化
Py3.Xソースファイルはutf-8符号化がデフォルトで使用され、以下のコードが合法的になります.
1
2
3
3.文法
1)<>を除去し、すべて改用!=2)除去」は、すべてrepr()3)キーワードをasとwithに加え、True,False,None 4)整数除算で浮動小数点数を返します.整数結果を得るには//5)を使用してnonlocal文を加えます.noclocal xを使用すると、周辺(非グローバル)変数6を直接割り当ててprint文を除去し、print()を加えます関数は同じ機能を実現します.同様にexec文もあり、exec()関数に変更されました.たとえば、2.X: print “The answer is”, 2*2 3.X: print(“The answer is”, 2*2) 2.X:print x,#カンマで終わる改行禁止3.X:print(x,end="")#改行2.X:print#出力新行3.X:print()#出力新行2.X:print>>sys.stderr、「fatal error」3.X: print(“fatal error”, file=sys.stderr) 2.X:print(x,y)#出力repr((x,y))3.X:print((x,y)#はprint(x,y)!7)順序オペレータの動作が変更され、例えばx
1
2
3
4
5
6
7
8
9
10
11
11)2進数字面量とbin()関数を追加
1
2
3
4
5
12)拡張された反復可能な解包.Py 3.Xでは,a,b,*rest=seqと*rest,a=seqが合法であり,restがlistオブジェクトとseqが反復可能であることを2点だけ要求する.13)新しいsuper()は、super()にパラメータを渡さなくてもよい.
1
2
3
4
5
6
7
8
9
14)新しいmetaclass構文:class Foo(*bases,**kwds):pass 15)はclass decoratorをサポートします.関数decoratorと同様に使用します.
1
2
3
4
5
6
7
8
9
10
class decoratorはタヌキを太子に変える大トリックに使うことができます.詳細については、PEP 3129を参照してください.
4.文字列とバイト列
1)文字列はstrの1種類しかありませんが、2.xバージョンのunicodeはほぼ同じです.
2)バイト列については、「データ型」の2番目の項目を参照してください.
5.データ型
1)Py3.Xはlongタイプを除いて、今は1つの整数型--intしかありませんが、その行為は2のようです.Xバージョンのlong 2)bytesタイプが2.Xバージョンの8ビット列で、bytesの字面量を定義する方法は以下の通りです.
1
2
3
strオブジェクトとbytesオブジェクトは使用できる.encode() (str -> bytes) or .decode()法(bytes->str)法は相互に変換される.
1
2
3
4
5
6
3)dictの.keys()、.itemsと.values()メソッドは反復器を返し,以前のiterkeys()などの関数は廃棄された.同時に取り除いたのはdict.has_ですkey()は、inで代用しましょう
6.オブジェクト向け
1)抽象ベースクラス(Abstraaact Base Classes,ABCs)を導入する.2)容器類と反復器類はABCs化されているのでcellectionsモジュールのタイプはPy 2よりも大きい.5多すぎます.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
また、数値タイプもABCs化されている.この点については、PEP 3119およびPEP 3141を参照してください.3)反復器のnext()メソッドをnext()と改名し,反復器を呼び出すためのnext()を追加し,@abstractmethodと@abstractpropertyの2つのdecoratorを追加し,抽象メソッド(属性)を記述するのがより便利になった.
7.異常
1)したがって異常はすべてBaseExceptionから継承する、StardardError 2を削除する)異常クラスのシーケンス挙動とを除去する.Message属性3)raise Exception,args構文4)の代わりにraise Exception(args)を用いて異常の構文変更をキャプチャし,Py 2においてasキーワードを導入して異常インスタンスを識別する.5:
1
2
3
4
5
6
7
Py 3.0:
1
2
3
4
5
5)contextは3.0 a 1バージョンで実装されていないため、異常チェーン
8.モジュール変動
1)cPickleモジュールを除去し,pickleモジュールで代用できる.最終的には、透明で効率的なモジュールがあります.2)imageopモジュールを除去3)audiodev,Bastion,bsddb 185,exceptions,linuxaudiodev,md 5,MimeWriter,mimify,popen 2,rexec,sets,sha,stringold,strop,sunaudiodev,timing,xmllibモジュール4)を除去したbsddbモジュール(単独で公開可能、http://www.jcea.es/programacion/pybsddb.htm取得)5)newモジュール6)osを除去する.tmpnam()とos.tmpfile()関数は、tmpfileモジュールの下7)tokenizeモジュールに移動され、bytesを使用して動作します.主なエントリポイントはgenerateではありませんtokensではなくtokenize.tokenize()
9.その他
1)xrange()はrange()と名前を変更し、range()を使用してlistを取得するには、明示的に呼び出す必要があります.
1
2
2)bytesオブジェクトはhashではなく、b.lower()、b.strip()およびb.split()メソッドもサポートされていませんが、後者についてはb.strip(b’trf’)およびb.split(b’’’)を使用して、同じ目的3)zip()、map()、filter()の両方を反復器に戻すことができます.apply()、callable()、coerce()、execfile()、reduce()、reload()関数は除去されました
callable()をhasattr()で置き換えることができる.hasattr()の構文は、hasattr(string,‘name’)のようになります.
4)string.lettersは関連しています...uppercaseが除去されましたstringに変更してください.ascii_lettersら5)x
1
2
Py 3.X:
1.性能
Py3.0 pystone benchmarkを実行する速度比Py 2.5は30%遅い.GuidoはPy 3とする.0は極めて大きな最適化空間があり、文字列と整形操作で良好な最適化結果を得ることができる. Py3.1性能比Py 2.5は15%遅く、まだ大きなアップグレードスペースがあります.
2.コード化
Py3.Xソースファイルはutf-8符号化がデフォルトで使用され、以下のコードが合法的になります.
>>> = 'china'
>>>print( )
china
1
2
3
3.文法
1)<>を除去し、すべて改用!=2)除去」は、すべてrepr()3)キーワードをasとwithに加え、True,False,None 4)整数除算で浮動小数点数を返します.整数結果を得るには//5)を使用してnonlocal文を加えます.noclocal xを使用すると、周辺(非グローバル)変数6を直接割り当ててprint文を除去し、print()を加えます関数は同じ機能を実現します.同様にexec文もあり、exec()関数に変更されました.たとえば、2.X: print “The answer is”, 2*2 3.X: print(“The answer is”, 2*2) 2.X:print x,#カンマで終わる改行禁止3.X:print(x,end="")#改行2.X:print#出力新行3.X:print()#出力新行2.X:print>>sys.stderr、「fatal error」3.X: print(“fatal error”, file=sys.stderr) 2.X:print(x,y)#出力repr((x,y))3.X:print((x,y)#はprint(x,y)!7)順序オペレータの動作が変更され、例えばx
>>> 0666
438
>>> oct(438)
'0666'
3.X :
>>> 0666
SyntaxError: invalid token (#63>, line 1)
>>> 0o666
438
>>> oct(438)
'0o666'
1
2
3
4
5
6
7
8
9
10
11
11)2進数字面量とbin()関数を追加
>>> bin(438)
'0b110110110'
>>> _438 = '0b110110110'
>>> _438
'0b110110110'
1
2
3
4
5
12)拡張された反復可能な解包.Py 3.Xでは,a,b,*rest=seqと*rest,a=seqが合法であり,restがlistオブジェクトとseqが反復可能であることを2点だけ要求する.13)新しいsuper()は、super()にパラメータを渡さなくてもよい.
>>> class C(object):
def __init__(self, a):
print('C', a)
>>> class D(C):
def __init(self, a):
super().__init__(a) # super()
>>> D(8)
C 8
<__main__.d object="" at="" class="hljs-number">0x00D7ED90>
1
2
3
4
5
6
7
8
9
14)新しいmetaclass構文:class Foo(*bases,**kwds):pass 15)はclass decoratorをサポートします.関数decoratorと同様に使用します.
>>> def foo(cls_a):
def print_func(self):
print('Hello, world!')
cls_a.print = print_func
return cls_a
>>> @foo
class C(object):
pass
>>> C().print()
Hello, world!
1
2
3
4
5
6
7
8
9
10
class decoratorはタヌキを太子に変える大トリックに使うことができます.詳細については、PEP 3129を参照してください.
4.文字列とバイト列
1)文字列はstrの1種類しかありませんが、2.xバージョンのunicodeはほぼ同じです.
2)バイト列については、「データ型」の2番目の項目を参照してください.
5.データ型
1)Py3.Xはlongタイプを除いて、今は1つの整数型--intしかありませんが、その行為は2のようです.Xバージョンのlong 2)bytesタイプが2.Xバージョンの8ビット列で、bytesの字面量を定義する方法は以下の通りです.
>>> b = b'china'
>>> type(b)
<type 'bytes'>
1
2
3
strオブジェクトとbytesオブジェクトは使用できる.encode() (str -> bytes) or .decode()法(bytes->str)法は相互に変換される.
>>> s = b.decode()
>>> s
'china'
>>> b1 = s.encode()
>>> b1
b'china'
1
2
3
4
5
6
3)dictの.keys()、.itemsと.values()メソッドは反復器を返し,以前のiterkeys()などの関数は廃棄された.同時に取り除いたのはdict.has_ですkey()は、inで代用しましょう
6.オブジェクト向け
1)抽象ベースクラス(Abstraaact Base Classes,ABCs)を導入する.2)容器類と反復器類はABCs化されているのでcellectionsモジュールのタイプはPy 2よりも大きい.5多すぎます.
>>> import collections
>>> print('
'.join(dir(collections)))
Callable
Container
Hashable
ItemsView
Iterable
Iterator
KeysView
Mapping
MappingView
MutableMapping
MutableSequence
MutableSet
NamedTuple
Sequence
Set
Sized
ValuesView
__all__
__builtins__
__doc__
__file__
__name__
_abcoll
_itemgetter
_sys
defaultdict
deque
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
また、数値タイプもABCs化されている.この点については、PEP 3119およびPEP 3141を参照してください.3)反復器のnext()メソッドをnext()と改名し,反復器を呼び出すためのnext()を追加し,@abstractmethodと@abstractpropertyの2つのdecoratorを追加し,抽象メソッド(属性)を記述するのがより便利になった.
7.異常
1)したがって異常はすべてBaseExceptionから継承する、StardardError 2を削除する)異常クラスのシーケンス挙動とを除去する.Message属性3)raise Exception,args構文4)の代わりにraise Exception(args)を用いて異常の構文変更をキャプチャし,Py 2においてasキーワードを導入して異常インスタンスを識別する.5:
>>> try:
... raise NotImplementedError('Error')
... except NotImplementedError, error:
... print error.message
...
Error
1
2
3
4
5
6
7
Py 3.0:
>>> try:
raise NotImplementedError('Error')
except NotImplementedError as error: # as
print(str(error))
Error
1
2
3
4
5
5)contextは3.0 a 1バージョンで実装されていないため、異常チェーン
8.モジュール変動
1)cPickleモジュールを除去し,pickleモジュールで代用できる.最終的には、透明で効率的なモジュールがあります.2)imageopモジュールを除去3)audiodev,Bastion,bsddb 185,exceptions,linuxaudiodev,md 5,MimeWriter,mimify,popen 2,rexec,sets,sha,stringold,strop,sunaudiodev,timing,xmllibモジュール4)を除去したbsddbモジュール(単独で公開可能、http://www.jcea.es/programacion/pybsddb.htm取得)5)newモジュール6)osを除去する.tmpnam()とos.tmpfile()関数は、tmpfileモジュールの下7)tokenizeモジュールに移動され、bytesを使用して動作します.主なエントリポイントはgenerateではありませんtokensではなくtokenize.tokenize()
9.その他
1)xrange()はrange()と名前を変更し、range()を使用してlistを取得するには、明示的に呼び出す必要があります.
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1
2
2)bytesオブジェクトはhashではなく、b.lower()、b.strip()およびb.split()メソッドもサポートされていませんが、後者についてはb.strip(b’trf’)およびb.split(b’’’)を使用して、同じ目的3)zip()、map()、filter()の両方を反復器に戻すことができます.apply()、callable()、coerce()、execfile()、reduce()、reload()関数は除去されました
callable()をhasattr()で置き換えることができる.hasattr()の構文は、hasattr(string,‘name’)のようになります.
4)string.lettersは関連しています...uppercaseが除去されましたstringに変更してください.ascii_lettersら5)x
>>> file
<type 'file'>
1
2
Py 3.X:
>>> file
Traceback (most recent call last):
File "" , line 1, in
file
NameError: name 'file' is not defined