我想要一个可能有或没有任何东西可以产生的生成器,如果使用.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
。
答案 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