Pythonのイテレータとイテレータオブジェクト

反復可能オブジェクト

①イテレート可能オブジェクトが定義され

イテレータのために、我々は、反復可能なよりよく理解しておく必要があり、ソースまたはで講義のいずれかの前に、多かれ少なかれ、我々は反復可能オブジェクト言葉を述べました。私たちは反復可能であるどのような正式なチャットを持っている今日のように、反復可能オブジェクトの前に、より良い理解を容易にするために、それは、非常に適切ではない説明するかもしれません。文字通りの意味から、我々はそれらを最初に解体されています。オブジェクトとは何ですか?Pythonですべてが私たちが前に言っている変数、リスト、文字列、ファイルハンドル、関数名などは、実際には、オブジェクトがポイントである場合、オブジェクトと呼ばれる本物であることができ、オブジェクト。だから、反復は何ですか?(単に彼は異なるサイクルではないことを繰り返した場合)実際には、私たちはしばしばこの言葉の日常生活の反復で出会い、更新の反復など、反復が、単純な繰り返し、各繰り返し反復プロセスではなく、これは、前回の結果に基づいています。たとえば、あなたと怒っているあなたの父は、あなたがああ、いや、あなたは、あなたの息子、あなたの息子に生まれたあなたの孫が生まれたというように、各世代が同じではありませんが、あなたの父が生まれた、とあなたは素敵なアプリ、微信ビブラートなど、すべてのを使用します時間の最後の期間に基づいて、いくつかの更新を行います、これは反復的です。文字通りの意味から反復可能オブジェクトは、それが本物のリピート値です。

私たちは反復可能であるものの文字通りの意味から分析されているので、これまでのところ、我々は反復可能オブジェクトにさらされて、何がいますか?

その後、等のファイルハンドルのDIC設定範囲、タプルSTRリスト、INT、BOOLなぜこれらが反復可能オブジェクト、それを呼び出すことはできませんか?見ながらこれらは文字通りの意味を満たしていないが、我々は、オブジェクトが反復可能でない判断する一定の基準やルールがあります。

Pythonで、いつでもオブジェクトが__iter__メソッド内に含ま反復可能です。

②オブジェクト内部メソッドを表示

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

s1 = 'miracle'
print(dir(s1))

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

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

③概要

文字通りに言えば:反復可能オブジェクトは、本物のリピート値です。

プロの立場から:内部オブジェクト__iter__メソッドを含む時はいつでも反復可能です。

イテレート可能オブジェクトは、オブジェクトが「持っているかどうかを決定することができるITER判断」方法。

反復オブジェクトを有利ことができます。

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

反復は、オブジェクトを欠点ことができます。

  1. メモリを取ります。

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

だから、何人かの人々は、この欠点を疑問視、とさえ私はループのためにそれを価値ことができ、キー以外の、インデックスを吹きます!はい、それらはほとんど変換した底部に循環するため、実際には、サイクルの値によって行うことができ、オブジェクトの最初の反復は、その後の値を運ぶ、イテレータに変換することが可能です。それでは、私たちは、イテレータを見てみると、どのような地獄です。

イテレータ

①定義されたイテレータ

ツールとして、よりここに充当:文字通りイテレータは値を繰り返すことができ言えば、あるツールです。

プロの立場から:イテレータオブジェクトは、次のとおりです。メソッドの実装は引数__next__ないどの要素が、その後、投げイテレータを呼び出すとStopIteration例外も.python達成されない場合は、シーケンス内の次の要素を返します。従って__iter__方法、および反復イテレータであってもよいです。「スムーズなパイソン」から

したがって、上記の事前のための説明の数、および理解しにくいが、あまりにも絡まっされていない、私たちの簡単な言葉があります:Pythonは、内部が「を含むイーター」メソッドをして「を含むの目標」アプローチがイテレータです。

②オブジェクトがイテレータであるかどうかを決定する方法

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

o1 = 'miracle'
o2 = [1, 2, 3]
o3 = (1, 2, 3)
o4 = {'name': 'cyx','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
# hsagn
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()

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

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

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

④イテレータ値

反復可能オブジェクトとなって反復値)は(__(除去率、スライシングとキー)ではありませんが、__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的错误。

機構⑤while用インナーループシミュレーション

私たちはちょうど循環ループが反復可能のターゲットにする必要があり、言及しているが、それはループの内部機構があるので、あなたがイテラブル値、できることを意味しません:コンバートイテラブルイテレータには、次の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

⑥まとめ

文字通り話す:ツールの値を反復処理することができますイテレータ。

プロの立場から:Pythonで、内部「を含むイーター」メソッドを含むと「次は、メソッドのイテレータオブジェクト」。

イテレータの利点:

  1. メモリを節約する:
    メモリの唯一つのデータ空間へのイテレータが同等:メモリ内の各データの値の両方が、このエントリの負荷電流のデータを解放するため。
  2. 不活性メカニズム:
    次の時間は、値ではなく、あまりにも多くの値をとります。

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

イテレータ短所:

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

  2. 値が後戻りされていない場合には、それだけでは価値のダウンを持っています。

l1 = [1, 2, 3, 4, 5, 6]
obj = iter(l1)

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

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

反復イテレータオブジェクトは、比較してもよいです

今日、反復可能なイテレータのより深い理解が、我々はについて話と2つのアプリケーション間の比較します:

  1. イテラブル:
    、(例えば、リスト、CRUD辞書、文字列の操作のような一般的に用いられている方法のような)独自の方法より柔軟な操作がより直感的に、このようなAループ反復の値から直接メモリを占有し、しませんデータセット。

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

  2. イテレータ:

    非常にメモリ保存、位置の値を記録することができますされ、値がループ+次の方法ではなく、データ比較の単一のセットを操作する直感的な方法を介して直接かもしれません。

    アプリケーション:あなたのデータが第一の要因を保存するよう、あなたの記憶や、あなたのメモリを爆発するためには大きすぎる、十分な大きさである場合には、データセットは、イテレータが良い選択である設定されています。

:より転載https://www.cnblogs.com/jin-xin/articles/10854130.html

公開された12元の記事 ウォン称賛7 ビュー159

おすすめ

転載: blog.csdn.net/caiyongxin_001/article/details/105036451