Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonイテレータとイテレータの違い


iterableは、組み込みメソッドiter()に渡されたときにイテレーターを生成するオブジェクトとして大まかに定義できます。オブジェクトが反復可能であるためには、いくつかの条件があります。クラスのオブジェクトは、__len__と__getitem__の2つのインスタンスメソッドを定義する必要があります。 iter()メソッドに渡されたときにこれらの条件を満たすオブジェクトは、イテレータを生成します。

反復可能な-

を理解するために、以下の例を理解しましょう
string = "Tutorialspoint"
for char in string:
print (char)

出力

T
u
t
o
r
i
a
l
s
p
o
i
n
t

コードの上で__getitem__(index)メソッドを使用して、indexで指定された位置にある要素を返します。

したがって、上記のコード-

  • インデックス0から開始
  • 呼び出し文字列.__getitem__(インデックス)
  • IndexErrorが発生しましたか?停止
  • ループの実行本体
  • インデックスをインクリメントし、手順2に戻ります。

イテレータ

イテレータは、永遠の状態変数を介して相互作用をカウントするオブジェクトとして定義されます。この場合、変数は、反復が最後の項目と交差するときにゼロに設定されません。代わりに、StopIteration()が発生して、反復の終了を示します。これは、以下の例のように、繰り返されるアイテムが1回だけ繰り返されることも意味します-

my_list = ['itemOne', 'TutorialsPoints']
iterators_of_some_list = iter(my_list)
for i in iterators_of_some_list:
   print(i)
for j in iterators_of_some_list: # doesn't work
   print(j)
#However
for k in my_list:
   print(k)
for l in my_list: # it worked
   print(l)

出力

itemOne
TutorialsPoints
itemOne
TutorialsPoints
itemOne
TutorialsPoints

イテレータのiter()メソッドはそれ自体を返すため(現在の状態を記憶するため)、上記のコードは当てはまります。したがって、上記には、それを終了するための「for」に似たループのような実装があります。


  1. Pythonのraw_input()関数とinput()関数の違いは何ですか?

    関数raw_input()は、ユーザーにプロンプ​​トを表示し(raw_input([arg])のオプションの引数)、ユーザーから入力を取得し、ユーザーが入力したデータをストリング。たとえば、 name = raw_input("What isyour name? ") print "Hello, %s." %name これはinput()とは異なり、後者はユーザーからの入力を解釈しようとします。通常は、input()を避け、raw_input()とカスタムの解析/変換コードを使用するのが最善です。 Python 3では、raw_input()の名前が

  2. Pythonの文字列とバイト文字列の違いは何ですか?

    文字列は文字のシーケンスです。これらは抽象的な概念であり、ディスクに直接保存することはできません。バイト文字列はバイトのシーケンスであり、ディスクに保存できるものです。それらの間のマッピングはエンコーディングです-これらはかなりたくさんあります(そして無限に多くが可能です)-そして、異なるエンコーディングが同じバイトをマッピングする可能性があるため、変換を行うために特定の場合にどちらが適用されるかを知る必要があります別の文字列に。たとえば、同じバイト文字列は、2つの異なるエンコーディングで2つの異なる文字列を表すことができます。 例 >>> b'\xcf\x84o\x