ホームページ >バックエンド開発 >Python チュートリアル >Python でジェネレーターが空かどうかを確認する方法
ジェネレーターの空性の決定
Python では、ジェネレーターは、遅延評価と大規模なデータセットの反復のための強力なツールです。ただし、ジェネレーターが空であるかどうかを判断するには、その動的な性質により特有の課題が生じます。リストやタプルとは異なり、ジェネレーターにはサイズ属性がありません。単純にそれらを反復処理すると、StopIteration 例外が発生します。
Peek vs. HasNext
いくつかの提案があります。 Peak() 関数を使用して、ジェネレーターに項目があるかどうかを確認します。 Peak() を使用すると、ジェネレーターの最初の項目を消費せずに取得できますが、ジェネレーターが空かどうかを判断する方法は提供されません。これは、ジェネレーターが空の場合、peek() が StopIteration 例外を発生させるためです。これは、空のジェネレーターを反復処理しようとしたときに発生する例外と区別がつきません。
同様に、hasNext() 関数は、一般的に、 Java にありますが、Python ジェネレーターでは使用できません。
最初から空かどうかを確認する
ジェネレーターが最初から空かどうかを判断するには、応答で提供されるカスタム関数のようなもの:
<code class="python">def peek(iterable): try: first = next(iterable) except StopIteration: return None return first, itertools.chain([first], iterable)</code>
この関数はジェネレーターの最初の要素を取得し、ジェネレーターが空の場合は None を返します。また、最初の要素を含む変更されたバージョンを返すことにより、ジェネレーターの状態も保存されます。
使用法
この関数を使用するには、ジェネレーターを使用して関数を呼び出すことができます。 argument:
<code class="python">res = peek(mysequence) if res is None: # sequence is empty. Do stuff. else: first, mysequence = res # Do something with first, maybe? # Then iterate over the sequence: for element in mysequence: # etc.</code>
このチェックにより、ジェネレーターが空かどうかを判断し、反復処理を行う前に空の場合を適切に処理できます。
以上がPython でジェネレーターが空かどうかを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。