ノートパソコンのマルチバージョンpythonの構成

6915 ワード

ノートパソコンのマルチバージョンpythonの構成
私のノートには、pythonの2つのバージョンがインストールされています.
python2.7.11
python3.5.0b2
まずpython 3がインストールされているので、システムの環境構成にはpython 3が残っていますが、python 2はありません.ネットで設定方法を調べると、2つのステップに分けることができます.
  • は、2つのバージョンpythonのパスを私のコンピュータ-プロパティ-高度-環境変数-pathに追加します.
  • は、2つのバージョンのインストールディレクトリのpythonをそれぞれインストールする.exeをpython 2に変更する.exeとpython 3.exe.

  • これにより、後で呼び出し時に直接cmdでpython2またはpython3を介して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符号化がデフォルトで使用され、以下のコードが合法的になります.
    >>>    = '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
    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)oct()関数を修正する新式の8進字変数.
    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! 
    

    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) 
     
    

    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から継承して、そしてStardardErrorを削除しました
    2)異常類を除去するシーケンス挙動と.メッセージ属性
    3)raise Exception,args構文の代わりにraise Exception(args)を用いる
    4)例外の構文変更をキャプチャし,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.tokenize()
    9.その他
    1)xrange()はrange()と名前を変更し、range()を使用してlistを取得するには、明示的に呼び出す必要があります.
    >>> list(range(10)) 
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
    

    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)x6)getsliceシリーズメンバーは破棄される.a[i:j]コンテキストに従ってa.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