[解決済み] 基本的なイテレータを作るには?
2022-03-15 06:39:26
質問
Python で反復関数 (またはイテレータオブジェクト) を作成するにはどうしたらよいでしょうか?
どのように解決するのですか?
Python のイテレータオブジェクトはイテレータプロトコルに準拠しており、基本的に2つのメソッドを提供します。
__iter__()
と
__next__()
.
-
は
__iter__
はイテレータオブジェクトを返し、暗黙のうちに呼び出されます。 をループの先頭で使用します。 -
は
__next__()
メソッドは次の値を返し、ループの増分ごとに暗黙のうちに呼び出されます。 このメソッドは、返すべき値がなくなると StopIteration 例外を発生させ、ループ構成によって暗黙のうちに捕捉されて反復が停止されます。
カウンターの簡単な例です。
class Counter:
def __init__(self, low, high):
self.current = low - 1
self.high = high
def __iter__(self):
return self
def __next__(self): # Python 2: def next(self)
self.current += 1
if self.current < self.high:
return self.current
raise StopIteration
for c in Counter(3, 9):
print(c)
これで印刷されます。
3
4
5
6
7
8
これは、以前の回答で取り上げたように、ジェネレータを使って書くと簡単です。
def counter(low, high):
current = low
while current < high:
yield current
current += 1
for c in counter(3, 9):
print(c)
印刷出力は同じになります。 裏を返せば、ジェネレータオブジェクトはイテレータプロトコルをサポートし、クラスCounterと大体似たようなことをやっているのです。
David Mertzの記事。 イテレータとシンプルなジェネレータ は、かなり良い入門書です。
関連
-
PythonによるLeNetネットワークモデルの学習と予測
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
python string splicing.join()とsplitting.split()の説明
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
Python LeNetネットワークの説明とpytorchでの実装
-
Python 入出力と高次代入の基礎知識
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].