空のジェネレーターの初期化の検出
Python では、ジェネレーターは一度に 1 つずつ値を生成する反復子です。そのため、ジェネレーターが最初から空であるかどうかを判断するのは困難な場合があります。リストやタプルとは異なり、ジェネレーターには固有の長さや isEmpty メソッドがありません。
課題への対処
これに対処する一般的なアプローチの 1 つは、ヘルパー関数を使用して次のことを行うことです。ジェネレーター内の最初の値を消費せずにピークします。 Peak 関数が None を返す場合、ジェネレータに項目がないことを示します。
推奨される実装
このような関数の 1 つである Peak という名前は、次のように実装できます。
def peek(iterable):
try:
first = next(iterable)
except StopIteration:
return None
return first, itertools.chain([first], iterable)
ピークを使用して空のジェネレーターを判断する
ジェネレーターが空かどうかを判断するには、ピークを使用できます。次の方法で関数を実行します:
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.
この例では、ジェネレーターが空の場合、ピーク関数は None を返し、if 条件は true になります。それ以外の場合は、else ブロックが実行されます。このアプローチを利用すると、ジェネレーターが最初から空かどうかを効果的に検出できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3