Pythonの正規クラス39 - イテレータ

この記事では、著者がすべてオリジナルです、転載の場合は、ソースを明記してください。https://www.cnblogs.com/xuexianqi/p/12560524.html

ワン:イテレータは何ですか

反復子は、各反復が継続し、単純に反復しない反復の結果に基づいて、反復は反復プロセスであり、反復ツールの値を指し

2:なぜ、イテレータを持っています

反復子反復値が使用するツールであり、その値を取り出しサイクルの種類の複数に関し

彼らは以下のとおりです。リスト、文字列、タプル、辞書、コレクション、ファイルを開きます

l=['egon','liu','alex']
i=0
while i < len(l):
    print(l[i])
    i+=1

反復方法は、上述したインデックス付きデータ型の値にのみ適用されます。リスト、文字列、タプル

イテレータの値に基づいて、インデックスの制限に対処するためには、Pythonは途中に依存しないインデックス値を提供する必要があり、これはイテレータです

3:どのようにイテレータ

1.オブジェクトは、反復的であってもよい。そこにビルトインされるたびにオブジェクトと呼ばれている方法は、反復を__iter__こと

s1=''
# s1.__iter__()

l=[]
# l.__iter__()

t=(1,)
# t.__iter__()

d={'a':1}
# d.__iter__()

set1={1,2,3}
# set1.__iter__()

with open('a.txt',mode='w') as f:
    # f.__iter__()
    pass

2. __iter__オブジェクトのメソッドは、イテレータは、イテレータオブジェクトを変換します呼び出すことができます

d={'a':1,'b':2,'c':3}
d_iterator=d.__iter__()
# print(d_iterator)

# print(d_iterator.__next__())
# print(d_iterator.__next__())
# print(d_iterator.__next__())
# print(d_iterator.__next__()) # 抛出异常StopIteration
while True:
    try:
        print(d_iterator.__next__())
    except StopIteration:
        break

print('====>>>>>>') # 在一个迭代器取值取干净的情况下,再对其取值娶不到
d_iterator=d.__iter__()
while True:
    try:
        print(d_iterator.__next__())
    except StopIteration:
        break


l=[1,2,3,4,5]
l_iterator=l.__iter__()

while True:
    try:
        print(l_iterator.__next__())
    except StopIteration:
        break

3.詳細なイテレータオブジェクトをイテレート可能オブジェクト

①反復可能オブジェクト

("可以转换成迭代器的对象"):内置有__iter__方法对象
 可迭代对象.__iter__(): 得到迭代器对象

②イテレータオブジェクト

内置有__next__方法并且内置有__iter__方法的对象
迭代器对象.__next__():得到迭代器的下一个值
迭代器对象.__iter__():得到迭代器的本身,说白了调了跟没调一个样子
dic={'a':1,'b':2,'c':3}

dic_iterator=dic.__iter__()
print(dic_iterator is dic_iterator.__iter__().__iter__().__iter__())

4.反復可能オブジェクト:文字列、リスト、タプル、辞書、ファイルオブジェクトを設定します

イテレータオブジェクト:ファイルオブジェクト

s1=''
s1.__iter__()

l=[]
l.__iter__()

t=(1,)
t.__iter__()


d={'a':1}
d.__iter__()

set1={1,2,3}
set1.__iter__()


with open('a.txt',mode='w') as f:
    f.__iter__()
    f.__next__()

5.forサイクルは動作します:ループはイテレータループを呼び出す呼び出すことができるため

# 1.d.__iter__()得到一个迭代器对象
# 2.迭代器对象.__next__()拿到一个返回值,然后将该返回值赋值给k
# 3.循环往复步骤2,直到抛出StopIteration异常for循环会捕捉异常然后结束循环

d={'a':1,'b':2,'c':3}

for k in d:
    print(k)
    
with open('a.txt',mode='rt',encoding='utf-8') as f:
    for line in f: # f.__iter__()
        print(line)
        
list('hello') #原理同for循环

4:イテレータは、長所と短所をまとめます

短所

統一された反復配列とタイプの非順次の値を提供する1

無制限に格納することができるイテレータオブジェクトがデータ・ストリームによって表される値を計算するために次を呼び出すために必要な場合にのみ、それは、それが反復子自体であることができ、一つの値だけメモリに一度、2.遅延評価大きなデータ・ストリームが、そのようなリストのような他の容器タイプ、全ての要素がメモリに格納される必要がある、メモリサイズを制限し、値の数を格納することができる限られています

短所

枯渇しない限り1、またはイテレータの長さを取得することはできません

2. [削除より「1-オフ」などのないバック初めに一つの値だけが、唯一の目標は、次のを待って、それ以外の場合は、一つの場所に滞在する、イテレータが枯渇の値になるまで次の方法で生成繰り返すことです呼び出しは、横;あなたは再び同じオブジェクトの反復処理をしたい場合は、あなただけの同じイテレータを使用して2つの以上のサイクルが存在する場合、必然的にのみサイクルに取得することがあるでしょう、新しいイテレータオブジェクトを作成するために、ITERメソッドを呼び出すことができます値

おすすめ

転載: www.cnblogs.com/xuexianqi/p/12560524.html