确定生成器的空性
在Python中,生成器是用于惰性评估和迭代大型数据集的强大工具。然而,由于发电机的动态特性,确定发电机是否为空是一个独特的挑战。与列表或元组不同,生成器没有大小属性,简单地迭代它们会导致 StopIteration 异常。
Peek 与 HasNext
有些人可能会建议使用 peek() 函数检查生成器是否有项目。虽然 peek() 允许您检索生成器的第一项而不消耗它,但它没有提供确定生成器是否为空的方法。这是因为 peek() 在生成器为空时引发 StopIteration 异常,这与尝试迭代空生成器时引发的异常没有区别。
类似地,hasNext() 函数通常在 Java 中找到,在 Python 生成器中不可用。
从Start
要确定生成器是否从一开始就是空的,您可以使用自定义函数,如响应中提供的函数:
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