百万年俸のpythonの道 - day11 - イテレータ

3.1反復可能オブジェクト

  3.1.1反復可能オブジェクト定義されました

        **在python中,但凡内部含有 _ _ iter_ _方法的对象,都是可迭代对象**。

  3.1.2オブジェクトの内部メソッドを表示します

内部オブジェクトは、他のどのような方法でそれを解決するために加えて、どのような方法を確認するためにソースコードが含まれていますか?で、もちろん、DIRによって()メソッドを持っているもののオブジェクトを判断します

s1 = 'alex'
print(dir(s1))

DIR()は、文字列メソッド名などのすべてのオブジェクトを含むリストを返します。このように、私たちはPythonでオブジェクトを決定することができます反復可能ではありません。

s1 = 'alex'
i = 100
print('__iter__' in dir(i))  # False
print('__iter__' in dir(s1))  # True

  3.1.3概要

プロの立場から:_ _内部iter__メソッドを含むオブジェクトは、反復可能なときはいつでも。

イテレート可能オブジェクト_オブジェクトの判定方法であっ判断できる場合_iter__。

反復可能オブジェクトの利点

あなたは視覚的に内部のデータを見ることができます。

反復可能オブジェクト短所

1. メモリを取ります。

2.イテラブルない反復値(指標以外、キーは削除します)。

実際には、イテラブルループの一連の動作を介してイテレータに

3.2イテレータ

  イテレータの定義3.2.1

プロの立場から:イテレータオブジェクトです:_自由パラメータを達成するために次は何の要素は、その後、投げイテレータを呼び出すとStopIteration例外も.python達成されない場合_メソッドは、シーケンス内の次の要素を返します。 __ __ ITER方法は、イテレータので、反復的かもしれません。「スムーズなパイソン」から

** Pythonで、_ _ _イーター内部に含まれる方法及び含有 _ _ _次にイテレータがオブジェクトのメソッドです。**

  オブジェクトがイテレータであるかどうかを判断する方法3.2.2

[OK]を、私たちは、この定義を持って、我々は、オブジェクトの数を決定することができ、イテレータまたは反復可能オブジェクトではありません、これらのオブジェクトを判断してください:反復可能オブジェクトであるイテレータであるファイルハンドルのSTRリストタプル辞書の設定範囲:

o1 = 'alex'
o2 = [1, 2, 3]
o3 = (1, 2, 3)
o4 = {'name': '太白','age': 18}
o5 = {1, 2, 3}
f = open('file',encoding='utf-8', mode='w')
print('__iter__' in dir(o1))  # True
print('__iter__' in dir(o2))  # True
print('__iter__' in dir(o3))  # True
print('__iter__' in dir(o4))  # True
print('__iter__' in dir(o5))  # True
print('__iter__' in dir(f))  # True

print('__next__' in dir(o1))  # False
print('__next__' in dir(o2))  # False
print('__next__' in dir(o3))  # False
print('__next__' in dir(o4))  # False
print('__next__' in dir(o5))  # False
print('__next__' in dir(f))  # True
f.close()

上記のコードを確認することができ、私たちが学んだこれらのオブジェクトの前に、専用のファイルハンドルがイテレータで、これらのデータ型の残りの部分は反復可能です。

  反復可能オブジェクトイテレータがどのように変換3.2.3:

l1 = [1, 2, 3, 4, 5, 6]
obj = l1.__iter__()
# <list_iterator object at 0x000002057FE1A3C8>
# 或
obj = iter(l1)
print(obj)
# <list_iterator object at 0x102cc67f0>

 3.2.4イテレータ値:

反復可能オブジェクトは、反復値となって(除去率、スライシングとキー)ではありませんが、)(__イテレータの値が__nextされ使用して、イテレータに変換することができます。

l1 = [1, 2, 3,]
obj = l1.__iter__()  # 或者 iter(l1)
# print(obj)  # <list_iterator object at 0x000002057FE1A3C8>
ret = obj.__next__()
print(ret)
ret = obj.__next__()
print(ret)
ret = obj.__next__()
print(ret)
ret = obj.__next__()  # StopIteration
print(ret)
# 迭代器利用next取值:一个next取对应的一个值,如果迭代器里面的值取完了,还要next,
# 那么就报StopIteration的错误。

  内部循環メカニズムのシミュレーションしばらく3.2.5:

次のBEを使用し、その後、イテレータに反復可能オブジェクトを変換する:私たちは言及している、循環ループは、反復可能なため、ターゲットである必要がありますが、ループのための内部機構があるので、それは、あなたが値を反復可能オブジェクトことができますという意味ではありません値が。最後に、例外処理プロセスを呼び出すとStopIterationが投げ。

l1 = [1, 2, 3, 4, 5, 6]
# 1 将可迭代对象转化成迭代器
obj = iter(l1)
# 2,利用while循环,next进行取值
while 1:
    # 3,利用异常处理终止循环
    try:
        print(next(obj))
    except StopIteration:
        break

  3.2.6概要:

プロの立場から:Pythonで、_内部成るITERは _イテレート可能オブジェクトにあります
専門的観点から:Pythonで、内部_含まITER _ _ _方法及び含有次にオブジェクト_メソッドイテレータ。

イテレータの利点:

メモリを保存します。メモリ内の唯一のデータ空間に相当するIterator:各データはメモリ内の値にリリースされますので、レコードの負荷電流。

不活性メカニズム。次回、値以上にならないような値をとります。

反復子は、良好なパターンは、上記の二つを説明することができるがあります反復は、データ処理の基礎です。メモリは、あまりにも多くのデータ・セットに適合しない場合は、我々はデータ項目が不活性取得する方法を見つける必要があり、その需要は、1つのデータ項目を取得します。これは、反復モードです。

イテレータ短所:

内部データのない直感的な眺め。

値が後戻りされていない場合は、値のみをダウンしています。

l1 = [1, 2, 3, 4, 5, 6]
obj = iter(l1)      # 等于 obj = l1.__iter__()

for i in range(2):
    print(next(obj))

for i in range(2):
    print(next(obj))

3.3反復同等イテレータオブジェクト

反復可能オブジェクト:

直接データセットの値ではないことができ、より直感的な、しかしメモリを占有し、このようなループ反復(例えば、リスト、CRUD辞書、文字列の操作のような一般的に使用される方法のような)独自の方法より柔軟な操作です。

アプリケーション:あなたは、データ処理のための柔軟性、および十分なメモリ空間に焦点を当てた場合、データセットはイテラブルに設定されているが明確な選択肢です。

イテレータ:

これは非常に、メモリを節約+ _ _ _ _次の直接的な方法ではなく、データ比較の単一のセットを操作する直感的な方法で位置値、値の月のサイクルを記録することができます。

アプリケーション:あなたのデータは、大きすぎる場合には十分な大きさのあなたの記憶を爆発するか、あなたがする第一の要因にメモリを節約、データセットが設定されているイテレータが良い選択です。(Pythonのファイルハンドルがイテレータに設定されている理由を参照してください)。

おすすめ

転載: www.cnblogs.com/zhangchaoyin/p/11221143.html