再温pythonドキュメント2017-07-08
2473 ワード
多くのシーケンスでforループを実現できます
-バックグラウンドで、for文はコンテナオブジェクトのiter()メソッドを呼び出します.この関数はnext()メソッドを定義した反復器オブジェクトを返し、コンテナ内の要素に一度にアクセスします.後続の要素がない場合、next()はStopIteration異常を引き起こし、forループに反復を停止するように伝えます.例
アクティブドメイン例 global文の解読は、特定の変数がグローバル役割ドメインに位置し、そこで再バインドされるべきであることを示すために使用することができる.nonlocal文は、現在のネーミングスペースを否定する役割ドメインを表し、親関数の役割ドメインを探してオブジェクトをバインドします.
新式類旧式類を再論する
違いは主に3つあるクラシッククラスは、デフォルトではベースクラスから派生していませんが、新しいクラスはobjectというベースクラスからデフォルトで派生しています. 古典クラスはクラス多重継承の際に左から右への深さ優先原則マッチング法を用いるが,新式クラスはC 3アルゴリズム(広さ優先とは異なる)を用いてマッチングする である.経典類はMROとinstanceがない.mro()は呼び出すが,新式クラスはある. C 3アルゴリズムの核心はmergeである.mergeリストでは、最初のシーケンスmroの最初のクラスが他のシーケンスに現れるか、最初のクラスであるか、または他のシーケンスが現れない場合、このクラスはこれらのシーケンスから削除され、アクセス順リスト に結合する.
まず、O(object)のmro(method resolution order)リストが[O,]であることを知る必要があります.次に、
リファレンス
https://segmentfault.com/a/1190000000749061
-バックグラウンドで、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)
新式類旧式類を再論する
違いは主に3つある
# old style
class A():pass
# new style
class A(obejct):pass
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