为了账号安全,请及时绑定邮箱和手机立即绑定

请教我怎么知道发电机一开始是否空了?

/ 猿问

请教我怎么知道发电机一开始是否空了?

不负相思意 2019-11-03 12:04:43

有没有一种简单的方法可以测试生成器是否没有任何东西,例如peek,hasNext,isEmpty等?

查看完整描述

3 回答

?
万千封印

您问题的简单答案:不,没有简单的方法。有很多解决方法。

实际上,不应该有一种简单的方法,因为生成器是什么:一种在不将序列保存在内存中的情况下输出值序列的方法。因此,没有向后遍历。

您可以编写has_next函数,或者甚至可以将其作为带有精美装饰器的方法添加到生成器上


查看完整回答
反对 回复 2019-11-04
?
慕的地8271018

建议:


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.



查看完整回答
反对 回复 2019-11-04
?
隔江千里

一种简单的方法是将可选参数用于next(),如果生成器用尽(或为空),则使用该参数。例如:


iterable = some_generator()


_exhausted = object()


if next(iterable, _exhausted) == _exhausted:

    print('generator is empty')

编辑:更正了mehtunguh注释中指出的问题。



查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 72 浏览
我要回答

相关问题推荐

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信