Python Iterator:ガイド
Pythonイテレータの作成方法:ガイド
イテレータはPythonのいたるところにあります。 「イテレータ」や「イテレータブル」という言葉を聞かずに基本を学ぶのは難しいです。
イテレータは、反復できるオブジェクトです。反復できる組み込みオブジェクトがいくつかありますが、独自のオブジェクトを定義することもできます。
このガイドでは、Pythonイテレータ、それらがどのように機能するか、およびコードでそれらをどのように使用できるかについて説明します。独自のイテレータをコンストラクタして、実際のコア機能について学習できるようにします。このガイドのコードは、Python3.xのインストールと互換性があります。
始めましょう!
イテレータとは何ですか?
イテレータは、反復できるオブジェクトです。イテレータは、そのオブジェクトから一度に1つのアイテムのデータを返します。
オブジェクトをforループで実行しようとすると、オブジェクトが反復可能かどうかを確認できます。オブジェクトをループできる場合、それは反復可能であることを意味します。文字列、リスト、タプル、および辞書は、反復可能なオブジェクトである組み込みデータ型の例です。
Pythonのイテレータオブジェクトには、次の2つのメソッドが必要です。
-
__iter__()
:これにより、イテレータを取得できます。 -
__next__()
:これにより、イテレータで次の値を取得できます。
__
アンダースコアは、特別な機能を示すため、イテレータで使用されます。イテレータを定義するには、これら2つの特別な関数を使用する必要があります。これらを合わせて、イテレータプロトコルと呼ばれます。これらのメソッドは通常、「iterandnextメソッド」と発音されます。
参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。
平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。
無限イテレータを構築する方法
基本から始めましょう。無限のイテレータを構築することです。これは最も単純なタイプのイテレータです。とてもシンプルなので、永遠に続きます。これは、チュートリアルの後半で修正します。
まず、イテレータクラスとなるCakesというクラスを定義しましょう。
class Cakes: def __init__(self, value): self.value = value
__init__
を宣言しました クラスのオブジェクトがインスタンス化されるとすぐに実行されるメソッド。 __init__
メソッドはコンストラクターと呼ばれます。この例では、__init__
メソッドは、valueという1つの値を取ることができます。
次に、イテレータプロトコルを作成します:
def __iter__(self): return self def __next__(self): return self.value
__iter__
メソッドは、イテレータオブジェクトを取得するために使用されます。 __next__
メソッドを使用すると、指定した反復可能オブジェクトの次の値を取得できます。
これまでのところ、コードが機能することを確認しましょう。これを行うには、クラスのオブジェクトを次のように定義します。
cake = Cakes(["Vanilla Sponge"])
ここまでは順調ですね!あなたは自分で考えているかもしれません:なぜこのコードは何もしないのですか?これは、クラスがイテレータ関数のみを返すためです。
イテレータを繰り返し処理して、機能するかどうかを確認する必要があります。 for-inループを使用してこれを行うことができます:
for c in cake: print(c)
コードは次のようになります:
Vanilla Sponge Vanilla Sponge …
バニラスポンジの呪い!コンソールに出力され続けるだけです。どうしたの?最初のイテレータを作成しました。非常にシンプルですが、機能します。
Pythonでfor-inループを使用したイテレータのテスト
イテレータを便利にする前に、for-inループの概念を修正してみましょう。最後の例では、コードをテストするためのfor-inループを作成しました。
for c in cake: print(c)
for-inループが機能する方法は、最初に__iter__()
を使用してオブジェクトのイテレーターを作成することです。 方法。次に、for-inループが__next__()
を呼び出します 値が返されないまで。
for-in
を考えることができます 単純なwhile
としてループする ループ。イテレータが返すことができる値がありますが、for-inループはそれらの値を返します。
便利なイテレータの作成
最後のイテレータはあまり役に立ちません。同じ値を何度も出力するだけです。そうは言っても、それはまだイテレータです。イテレータ内のすべてのオブジェクトを読み取ることができます。
Python配列を反復処理するイテレータを作成します。この配列には、ケーキのリストが含まれています。
イテレータが無限に繰り返されないようにするために、イテレータ内にある値の数と、イテレータが実行された回数を追跡します。これにより、イテレータ内のすべてのアイテムを反復処理した後、イテレータの実行を停止できます。
新しいPythonファイルを開き、次のコードを貼り付けます。
class Cakes: def __init__(self, value): self.value = value self.max = len(value) self.count = 0 def __iter__(self): return self def __next__(self): if self.count < self.max: to_return = self.value[self.count] self.count += 1 return to_return else: raise StopIteration
このイテレータは、前回のイテレータよりも少し複雑です。そのため、最初に無限イテレータを作成しました。このイテレータでは、次の3つの値を初期化しました。
- 値:繰り返し処理するアイテム。
- max:反復可能アイテムのアイテム数。
- count:イテレータが実行した回数。
__next__()
で メソッドには、「if」ステートメントを追加しました。このステートメントは、イテレーターが実行された回数(count)が、イテレーターが反復する必要のあるアイテムの数(max)よりも少ないかどうかをチェックします。
「count」が「max」よりも小さい場合、イテレータはiterableオブジェクトで次の値を見つけます。次に、「count」変数に1を追加して、反復処理するために残っているオブジェクトの数を追跡できるようにします。次に、計算した値を返します。
「count」変数をインクリメントする前に、変数「to_return」に値を割り当てることに注意することが重要です。これにより、イテレータの現在の反復の値にアクセスできるようになります。
リスト内のすべてのアイテムを繰り返し処理すると、StopIterationという例外が発生します。これにより、リスト内のすべてのアイテムを繰り返し処理すると、プログラムが停止します。
イテレータが機能するかどうかを見てみましょう。次のコードをメインプログラムに追加して実行します。
cake = Cakes(["Vanilla Sponge"]) for c in cake: print(c)
私たちのコードは次を返します:
Vanilla Sponge
リストにさらにいくつかのアイテムを追加して、何が起こるか見てみましょう:
cake = Cakes(["Vanilla Sponge", "Carrot", "Coffee"]) for c in cake: print(c)
コードは次のようになります:
Vanilla Sponge Carrot Coffee
やった!ケーキのリストをループするイテレータを正常に作成しました。ここまで到達するには、ケーキ、または単なるカップケーキに値します。
結論
イテレータを使用すると、反復可能なオブジェクトを作成できます。イテレータは、リスト、文字列、または別の反復可能なオブジェクトをループして、特定のアクションを実行できます。
挑戦しますか?数値のリストをループし、各数値に2を掛けた値を返すイテレータを作成します。
このイテレータのコードは上記の例と同様であり、イテレータプロトコルを引き続き使用しますが、メインプログラムに返される前に、リスト内の各数値に2を掛ける必要があります。
これで、エキスパートのようにPythonで独自のイテレータを作成する準備が整いました。
-
Pythonインタープリター:ステップバイステップガイド
Pythonインタープリターは、マシンに正しいバージョンのPythonがインストールされていることを確認しなくてもオンラインで存在するため、Pythonは非常にアクセスしやすく学習できます。この記事では、Pythonインタープリターとは何かについて説明し、オンラインで使用できる、より人気のある、初心者向けのインタープリターをいくつかリストします。 Pythonプログラムはどのように実行されますか? Pythonは、Javaと同様に、インタプリタ言語またはコンパイル言語として完全に分類することはできません。両方のほんの少しです。 この場合にコンパイルされるということは、どの
-
Pythonディクショナリ値:ガイド
Pythonディクショナリvalues()メソッドは、ディクショナリ内の値を含むオブジェクトを返します。このメソッドは、ディクショナリの値のみを反復処理する場合に役立ちます。後で辞書を変更すると、values()メソッドに格納されているデータが変更され、新しい辞書が反映されます。 Pythonを使用している場合は、データを辞書に保存することを決定できます。たとえば、レストラン管理システムを構築しているとします。辞書を使用して、各注文に関するデータを保存することをお勧めします。 疑問に思われるかもしれません。辞書に保存されている値を取得するにはどうすればよいですか。ここで、Pythonディ