假设我有哪些咨询一些外部状态服务并返回一个值,为简单的功能,让我们假设值是一个整数:“迭代”函数的返回值
i = 10
def foo():
global i
i -= 1
return i
很明显,我可以在它返回一个虚假值之前调用这个函数9次(第10次调用将返回0,这将在布尔上下文中计算为false)。
def take_while_truthy(func):
while True:
nextval = func()
if not nextval:
break
yield nextval
然后:一些功能以这种方式工作,我现在可以用在发电机包装它 “迭代” 它
for x in take_while_truthy(foo):
print x
给我:
9
8
[...]
2
1
我问题是:标准库中的某个地方是否有更高级的函数,它可以执行此操作或类似的操作?我浏览了itertools和functools,但没有发现任何与我想要做的事情非常相似的东西。我错过了什么吗?
'itertools.takewhile'最接近,但对于这一点,你必须改变你的功能发电机或包裹在一个发电机。 – 2011-12-20 20:55:32
http://docs.python.org/library/itertools.html#itertools.takewhile有什么问题?你在寻找'bool'作为谓词吗? – 2011-12-20 20:56:14
'takewhile'需要一个迭代器 - 在我的情况下,该函数返回一个标量值,而不是一个生成器。 – dcrosta 2011-12-20 20:59:50