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'  
    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__getitem__(slice(I,j))または__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の違いを増やしてください.本章の内容が皆さんに役に立つことを願っています.ありがとうございます.