假设我有一个函数,它引用一些外部有状态服务并从中返回一个值,为了简单起见,我们假设该值是一个整数:
i = 10
def foo():
global i
i -= 1
return i
很明显,在这个函数返回falsy值之前,我可以调用它9次(第10次调用将返回0,它在布尔上下文中的计算结果为false)。对于一些这样工作的函数,我现在可以通过在生成器中包装它来“迭代”它:
^{pr2}$然后:
for x in take_while_truthy(foo):
print x
给我:
9
8
[...]
2
1
我的问题是:在标准库的某个地方,是否有一个高阶函数可以这样做或类似的事情?我浏览了itertools和{a2},但没有找到与我想做的完全一样的东西。我错过什么了吗?在
这实际上可以使用内置的^{} 来完成,如果您提供两个参数而不是一个参数,那么第一个参数应该是一个函数,该函数将被反复调用,直到函数的返回值达到sentinel值:
下面是itertools解决方案的外观,
^{pr2}$iter()
绝对更干净,但这允许您测试任何错误的返回:相关问题 更多 >
编程相关推荐