单对象迭代器

Single object iterator

为了与 API 保持一致,我必须 返回 一个迭代器,它只产生一个值然后停止(它必须是 .__iter__() 返回的正确值).到目前为止,我有:

return (myobject for _ in [0])

有没有更好的(更多 "Pythonic")方法来做到这一点?

您可以使用 yield statement:

yield myobject

调用该函数将return生成一个生成器。

我会用

return (myobject for _ in (0,))

return (myobject for _ in ".")

因为元组或字符串文字是静态分配的,而 [0] 每次都分配一个新的新列表。

你可以试试

def single_value(x): yield x
return single_value(myobject)

获得发电机。或者与 single_value = lambda x: (i for i in (x,)).

相同

作为可迭代对象也可以,其他选项是

return iter([myobject])
return iter((myobject,))

而且即使是可迭代的也很好,

return [myobject]
return (myobject,)

更容易。

用你现有的,效果很好:

(o for o in [myobject])

Returns 生成一个对象的生成器。

编辑:6502 的回答更好!不使用列表会更有效率。

编辑:由于问题已更改,此答案不再适用。

我认为这个答案涵盖了迄今为止给出的答案的所有优点

>>> def f():
       yield from (x[0] for x in iter(itertools.repeat([myobject], 1)) if True)


>>> type(f())
<class 'generator'>