python 2と3の違い

5924 ワード

python 2とpython 3の違い
  • 区別
  • 一、python 3.0のいくつかの変化
  • 1.print関数
  • 2.Unicode
  • 3.除算演算
  • 4.異常
  • 5.xrange
  • 6.8進数字面量表示
  • 7.不等演算子
  • 8.repr式「
  • 」を削除
  • 9.複数のモジュールが名前を変更する(PEP 8による)
  • 10.データ型
  • まとめ
  • 区別する
     pythonの3.0バージョンは、python 3000と呼ばれ、py 3 kと略称されることが多い.pythonの以前のバージョンに比べて、これは大きなアップグレードで、python 3.0は設計時に下向き適合を考慮していない.以前のpythonバージョンのために設計された多くのプログラムはpython 3には使用できません.0で正常に実行されます.既存のプログラムの世話をするためにpython 2.6移行バージョンとしてpython 2が基本的に使用されている.xの構文とライブラリはpython 3への配慮を同時に考慮する.0の移行で、python 3の一部を使用できます.0の構文と関数.新しいpythonプログラムはpython 3を使用することを推奨します.0バージョンの構文.実行環境でpython 3をインストールできない場合を除きます.0またはプログラム自体がpython 3をサポートしていない.0のサードパーティ製ライブラリ.現在pythonをサポートしていないサードパーティ製ライブラリには、Twisted、py 2 exe、PILなどがあります.ほとんどのサードパーティ製ライブラリはpython 3との互換性を努力しています.バージョン0python 3をすぐに使用できなくても.0は、互換性のある3.0バージョンのpythonプログラムを作成し、2.6,2.7を使用して実行することも推奨されます.
    一、python 3.0のいくつかの変化
    1.print関数
     print文がなくなり、代わりにprint()関数があります.python2.6とpython 2.7部のサポートはこの形式のprint構文です.python 2.6と2.7の中で以下の3つの形式は等価です
    print "    "
    print (    ) #  print      
    print("    ") #print()          
    

    しかしpython 2.6実際には新しいprint()構文がサポートされています
    from _future_import print_function
    print("     ","    ",sep=', ')
    

    2.Unicode
     python 2にはASCII str()タイプがあり、unicode()は単独でbyteタイプではありません.python 3にUnicode(utf-8)文字列とバイトクラス:byteとbytearraysがあります.python 3のため.xソースファイルはutf-8符号化がデフォルトで使用され、以下のコードが合法的になります.
        ='I have no girlfriends'
    print(    )
    

    3.除算演算
    pythonの除算は、他の言語に比べて高度に複雑なルールがあります.pythonの除算には/と//の2つの演算子があります.まず除算、python 2.xは多くの言語と同様にjavaとcのように、整数の除算結果は整数であり、小数点を完全に無視し、浮動小数点の除算は小数点の部分から得られた浮動小数点の結果を保持する.  python3.x中除法はこれ以上行われず,整数間の相殺結果も浮動小数点数となる.(ここでは0/1で理解できる)xと3.xでは一致しています.
    #python2.x 3.x
    -1//2 #    -1
    

      小数部を捨てるのではなくfloor操作を実行することに注意し、小数部を切り取るにはmathモジュールのtrunc関数を使用する必要があります.
    4.異常
      python 3では処理異常もわずかに変化し,python 3ではasをキーワードとした.異常をキャプチャする構文はexcept exc,varからexcept exc as varに変更される.構文except(exc 1,exc 2)as varを使用すると、複数のカテゴリの例外を同時にキャプチャできます.python2.6この2つの文法はすでにサポートされています.・2.x時代には、すべてのタイプのオブジェクトが直接投げ出すことができ、3.x時代はBaseExceptionを継承する対象だけが投げ出される.・2.x raise文はカンマで投げ出すオブジェクトタイプとパラメータを分けます.3.xこのような奇抜な書き方をキャンセルし,構造関数を直接呼び出してオブジェクトを投げ出せばよい.ゞ  在2.ゞx時代、異常はコードの中でプログラムの誤りを表す以外に、よく普通の制御構造がすべきことをして、3.xでは,設計者が異常をよりユニークにし,エラーが発生した場合にのみ異常キャプチャ文で処理できることが分かる.
    5.xrange
    python 2でxrange()を使用して反復オブジェクトを作成する方法は非常に流行しています.たとえば、forループまたはリスト/セット/辞書導出式です.この表現はジェネレータによく似ています(例えば、「不活性評価」).しかし、このxrange-iterableは無限であり、無限に遍歴できることを意味します.  その不活性評価のため、何度も遍歴する場合は、xrange()関数はrange()関数よりも速い(forループなど).それでも、反復を1回比較すると、複数回反復することは推奨されません.そのため、ジェネレータは毎回最初から開始します.python 3では、range()はxrange()のように実装され、専門的なxrange()関数が存在しなくなる(python 3ではxrange()が命名異常を放出する.
    6.8進数字面量表示
    8進法は0 o 777と書かなければならない.元の形式は0777では使えない.バイナリ0 b 111.整数をバイナリ文字列に変換するbin()関数が追加されました.python2.6この2つの構文は既にサポートされています
    7.不等演算子
    python2.xで等しくない!=および<>python 3.xの中でただあることに等しくありません!=
    8.repr式を削除しました」
    python2.x中反引用符「repr関数の役割python 3.xに相当する」という書き方は、repr関数のみを許可し、reprはdebugの場合のみ使用され、str関数で文字列でオブジェクトを記述することが多いと感じます.
    9.複数のモジュールが名前を変更された(PEP 8による)
    古い名前
    新しい名前
    _winreg
    winreg
    ConfigParser
    configparser
    copy_reg
    copyreg
    Queue
    queue
    SocketServer
    socketserver
    repr
    reprlib
    StringIOモジュールは現在、新しいioモジュールに組み込まれてnew,md 5,gopherlibなどのモジュールが削除されています.python2.6新しいioモジュールを支援しました. httplibBase,HTTPServer,CGIHTTPServer,SimpleHTTPServer,Cookie,cookerlibはhttpパッケージに統合される.EXec文をキャンセルした場合、exec()関数のみが残ります.python2.6はexec()関数をサポートしています.
    10.データ型
      python3.xはlongタイプを除いて、現在は1つの整数型しかありません.intはbytesタイプを追加し、2に対応しています.xバージョンの8ビット列、butes字面量を定義する方法は以下の通りです.
    b=b'lalala'
    type(b)
    #  
    

    strオブジェクトとbytesオブジェクトはencode()(str->bytes)orを使用できます.decode()(bytes->str)法は互いに変換される.
    s=b.decode()
    b1=s.encode()
    

    dictkeys()、.itemsと.values()メソッドは反復器を返し,以前のiterkeys()などの関数は破棄された.同僚が削除したのはdict.hasです.key()、inで代用しましょう>
    まとめ
    とにかく一言、python 3を使いましょう.もう強情にならないでください.コンピューターの勉强を始めたばかりで、初めてブログを书きました.もし问题があれば、皆さんに指摘してもらいたいです.一绪に勉强して、一绪に进歩してほしいです.共に励ます!