生成器不一定产生任何东西

时间:2015-03-12 23:33:15

标签: python

我想要一个可能有或没有任何东西可以产生的生成器,如果使用.next()或类似的生成器,如果没有满足任何条件,则不会出现StopIteration错误

一个例子:

def A(iterable):
    for x in iterable:
        if x == 1:
           yield True

其功能如下:

>>> list(A([1,2]))
[True]
>>> A([1]).next()
True
>>> A([2]).next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

但我希望A([2]).next()返回的是None

2 个答案:

答案 0 :(得分:2)

通常,在这些情况下,您将使用内置next函数:

my_iterator = A([2])
value = next(my_iterator, None)

除了能够在迭代器为空时传递可选的“默认”值时,next还具有处理python2.x和python3.x的优点,其中方法的名称更改为{{ 1}}。

答案 1 :(得分:1)

这个怎么样:

def A(iterable):
    for x in iterable:
       yield True if x == 1 else None