생성기의 비어 있음 확인
Python에서 생성기는 지연 평가 및 대규모 데이터 세트 반복을 위한 강력한 도구입니다. 그러나 발전기가 비어 있는지 확인하는 것은 동적 특성으로 인해 독특한 과제를 제시합니다. 목록이나 튜플과 달리 생성기에는 크기 속성이 없으며 단순히 반복하면 StopIteration 예외가 발생합니다.
Peek 대 HasNext
일부는 제안할 수도 있습니다. peek() 함수를 사용하여 생성기에 항목이 있는지 확인합니다. peek()를 사용하면 생성기를 사용하지 않고 생성기의 첫 번째 항목을 검색할 수 있지만 생성기가 비어 있는지 확인하는 방법은 제공되지 않습니다. 이는 peek()가 생성기가 비어 있을 때 StopIteration 예외를 발생시키기 때문입니다. 이는 빈 생성기를 반복하려고 할 때 발생하는 예외와 구별할 수 없습니다.
마찬가지로 hasNext() 함수는 일반적으로 Java에서 발견되며 Python 생성기에서는 사용할 수 없습니다.
시작
생성기가 처음부터 비어 있는지 확인하려면 응답에 제공된 것과 같은 맞춤 함수를 사용할 수 있습니다.
def peek(iterable):
try:
first = next(iterable)
except StopIteration:
return None
return first, itertools.chain([first], iterable)
이 함수는 생성기의 첫 번째 요소를 검색하고, 생성기가 비어 있으면 None을 반환합니다. 또한 첫 번째 요소를 포함하는 수정된 버전을 반환하여 생성기의 상태를 보존합니다.
사용법
이 함수를 사용하려면 생성기를 사용하여 호출할 수 있습니다. 인수:
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.
이 검사를 통해 생성기가 비어 있는지 확인하고 이를 반복하기 전에 빈 케이스를 적절하게 처리할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3