再温pythonドキュメント2017-07-08

2473 ワード

多くのシーケンスでforループを実現できます
-バックグラウンドで、for文はコンテナオブジェクトのiter()メソッドを呼び出します.この関数はnext()メソッドを定義した反復器オブジェクトを返し、コンテナ内の要素に一度にアクセスします.後続の要素がない場合、next()はStopIteration異常を引き起こし、forループに反復を停止するように伝えます.
  • >>> s = 'abc'
    >>> it = iter(s)
    >>> it
    
    >>> next(it)
    'a'
    >>> next(it)
    'b'
    >>> next(it)
    'c'
    >>> next(it)
    Traceback (most recent call last):
      File "", line 1, in ?
        next(it)
    StopIteration
    

    アクティブドメイン
  • def scope_test():
        def do_local():
            spam = "local spam"
        def do_nonlocal():
            nonlocal spam
            spam = "nonlocal spam"
        def do_global():
            global spam
            spam = "global spam"
        spam = "test spam"
        do_local()
        print("After local assignment:", spam)
        do_nonlocal()
        print("After nonlocal assignment:", spam)
        do_global()
        print("After global assignment:", spam)
    scope_test()
    print("In global scope:", spam)
    
  • global文の解読は、特定の変数がグローバル役割ドメインに位置し、そこで再バインドされるべきであることを示すために使用することができる.nonlocal文は、現在のネーミングスペースを否定する役割ドメインを表し、親関数の役割ドメインを探してオブジェクトをバインドします.

  • 新式類旧式類を再論する
    違いは主に3つある
  • クラシッククラスは、デフォルトではベースクラスから派生していませんが、新しいクラスはobjectというベースクラスからデフォルトで派生しています.
  • # old style
    class A():pass
    # new style
    class A(obejct):pass
    
  • 古典クラスはクラス多重継承の際に左から右への深さ優先原則マッチング法を用いるが,新式クラスはC 3アルゴリズム(広さ優先とは異なる)を用いてマッチングする
  • である.
  • 経典類はMROとinstanceがない.mro()は呼び出すが,新式クラスはある.
  • C 3アルゴリズムの核心はmergeである.mergeリストでは、最初のシーケンスmroの最初のクラスが他のシーケンスに現れるか、最初のクラスであるか、または他のシーケンスが現れない場合、このクラスはこれらのシーケンスから削除され、アクセス順リスト
  • に結合する.
    class A(O):pass
    class B(O):pass
    class C(O):pass
    class D(A,B):pass
    class E(C,D):pass
    

    まず、O(object)のmro(method resolution order)リストが[O,]であることを知る必要があります.次に、
    mro(A) = [A, O]
    mro(B) = [B, O]
    mro(C) = [C, O]
    mro(D) = [D] + merge(mro(A), mro(B), [A, B])
    = [D] + merge([A, O], [B, O], [A, B])
    = [D, A] + merge([O], [B, O], [B])
    = [D, A, B] + merge([O], [O])
    = [D, A, B, O]
    mro(E) = [E] + merge(mro(C), mro(D), [C, D])
    = [E] + merge([C, O], [D, A, B, O], [C, D])
    = [E, C] + merge([O], [D, A, B, O], [D])
    = [E, C, D] + merge([O], [A, B, O])
    = [E, C, D, A, B] + merge([O], [O])
    = [E, C, D, A, B, O]
    

    リファレンス
    https://segmentfault.com/a/1190000000749061