Python 2とPython 3の違い!
6964 ワード
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
3、文法:1)を除いて、すべて改用します!=2)削除`,すべてrepr()3)キーワードプラスasとwith,さらにTrue,False,None 4)整数除算で浮動小数点数を返し,整数結果を得るには//5)プラスnonlocal文を用いる.noclocal xを使用すると、周辺(非グローバル)変数6)を直接割り当ててprint文を除去し、print()関数を加えて同じ機能を実現できます.同じようにexec文もあり、exec()関数に変更されました.例:
7)順序オペレータが変更された場合,例えばx TypeErrorはすぐに戻るbool値ではない8)入力関数が変更され,raw_が削除される.input、inputで代用:
9)タプルパラメータを除去してパケットを解く.def(a,(b,c):passはこのように関数を10と定義した)新式の8進字変数ではなく,oct()関数を修正した.
11)2進数字面量とbin()関数を追加
12)拡張された反復可能な解包.Py 3.Xでは,a,b,*rest=seqと*rest,a=seqが合法であり,restがlistオブジェクトとseqが反復可能であることを2点だけ要求する.13)新しいsuper()は,super()にパラメータを渡さなくてもよい.
14)新しいmetaclass構文:
15)class decoratorをサポートする.使用法は関数decoratorと同じです.
4、文字列とバイト列:1)現在、文字列はstrの1つのタイプしかありませんが、2.xバージョンのunicodeは同じです.2)バイト列については、「データ型」の2番目の項目を参照してください.
5、データ型:1)Py 3.Xはlongタイプを除いて、今は1つの整型--intしかありませんが、それは2のようです.Xバージョンのlong 2)bytesタイプが2.Xバージョンのビット列、1つのbytes字面量を定義する方法は以下の通りである.
strオブジェクトとbytesオブジェクトは使用できる.encode() (str -> bytes) or .decode()(bytes->str)方式は互いに変換される.
3)dictの.keys()、.itemsと.values()方式は反復器を返し,アルゴン以前のiterkeys()などの関数は廃棄される.同時に取り除いたのはdict.has_ですkey()は、inで置き換えられます.
6、対象向け:1)アブストラクトベース(Abstraaact Base Classes,ABCs)を引く.2)容器類と反復器類はABCs化されているのでcellectionsモジュールのタイプはPy 2よりも大きい.5多すぎます.
また、数値タイプもABCs化されている.この点については、PEP 3119およびPEP 3141を参照してください.3)反復器のnext()方式は
7、異常:1)だから異常はすべてBaseExceptionから継承して、そしてStardardror 2を削除した)異常類を除去したシーケンスは和である.Message属性3)raise Exception,args構文4)の代わりにraise Exception(args)を用いる異常の構文変更をキャプチャし,asキーワードを引いて異常インスタンスを識別し,Py 2.5:
Py 3.0:
5)
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()
9、その他:1)xrange()はrange()と改名し、range()を使用してリストを1つ取得するには、明示的に呼び出す必要があります.
2)bytesオブジェクトはhashもb.lower()もb.strip()もb.split()もb.split()もサポートされていませんが、後者についてはb.strip(b’trf’)とb.split(b’’)を使用して同じ目的を達成できます.3)zip()、map()、filter()は反復器を返します.一方、apply()、callable()、coerce()、execfile()、reduce()およびreload()関数は、callable()をhasattr()で置き換えることができるようになった.hasattr()の文法は、hasattr(string,__getitem__(slice(I,j))または
Py 3.X:
下にPy 2とPy 3の違いを増やしてください.本章の内容が皆さんに役に立つことを願っています.ありがとうございます.
2、コード:
= 'china'
print( )
結果出力:china
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 TypeErrorはすぐに戻るbool値ではない8)入力関数が変更され,raw_が削除される.input、inputで代用:
2.X:guess = int(raw_input('Enter an integer : ')) #
3.X:guess = int(input('Enter an integer : '))
9)タプルパラメータを除去してパケットを解く.def(a,(b,c):passはこのように関数を10と定義した)新式の8進字変数ではなく,oct()関数を修正した.
2.X :
>>> 0666
438
>>> oct(438)
'0666'
3.X :
>>> 0666
SyntaxError: invalid token (, line 1)
>>> 0o666
438
>>> oct(438)
'0o666'
11)2進数字面量とbin()関数を追加
>>> bin(438)
'0b110110110'
>>> _438 = '0b110110110'
>>> _438
'0b110110110'
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="">
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!
4、文字列とバイト列:1)現在、文字列はstrの1つのタイプしかありませんが、2.xバージョンのunicodeは同じです.2)バイト列については、「データ型」の2番目の項目を参照してください.
5、データ型:1)Py 3.Xはlongタイプを除いて、今は1つの整型--intしかありませんが、それは2のようです.Xバージョンのlong 2)bytesタイプが2.Xバージョンのビット列、1つのbytes字面量を定義する方法は以下の通りである.
>>> b = b'china'
>>> type(b)
strオブジェクトとbytesオブジェクトは使用できる.encode() (str -> bytes) or .decode()(bytes->str)方式は互いに変換される.
>>> s = b.decode()
>>> s
'china'
>>> b1 = s.encode()
>>> b1
b'china'
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
また、数値タイプもABCs化されている.この点については、PEP 3119およびPEP 3141を参照してください.3)反復器のnext()方式は
__next__()
と改名され,内蔵関数next()を増やし,反復器を呼び出すための__next__()
方式4)は@abstractmethodと@abstractpropertyの2つのdecoratorを増やし,抽象方式(属性)を記述するのがより便利である.7、異常:1)だから異常はすべてBaseExceptionから継承して、そしてStardardror 2を削除した)異常類を除去したシーケンスは和である.Message属性3)raise Exception,args構文4)の代わりにraise Exception(args)を用いる異常の構文変更をキャプチャし,asキーワードを引いて異常インスタンスを識別し,Py 2.5:
>>> try:
... raise NotImplementedError('Error')
... except NotImplementedError, error:
... print error.message
...
Error
Py 3.0:
>>> try:
raise NotImplementedError('Error')
except NotImplementedError as error: # as
print(str(error))
Error
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()
9、その他:1)xrange()はrange()と改名し、range()を使用してリストを1つ取得するには、明示的に呼び出す必要があります.
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2)bytesオブジェクトはhashもb.lower()もb.strip()もb.split()も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__setitem__
および__delitem__
呼び出し7)に変換するfileクラスは、Py 2で廃棄される.5: >>> file
Py 3.X:
>>> file
Traceback (most recent call last):
File "", line 1, in
file
NameError: name 'file' is not defined
下にPy 2とPy 3の違いを増やしてください.本章の内容が皆さんに役に立つことを願っています.ありがとうございます.