“迭代”函数的返回值

2024-04-26 07:59:56 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个函数,它引用一些外部有状态服务并从中返回一个值,为了简单起见,我们假设该值是一个整数:

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},但没有找到与我想做的完全一样的东西。我错过什么了吗?在


Tags: 函数infalseforreturnfoo状态def
1条回答
网友
1楼 · 发布于 2024-04-26 07:59:56

这实际上可以使用内置的^{}来完成,如果您提供两个参数而不是一个参数,那么第一个参数应该是一个函数,该函数将被反复调用,直到函数的返回值达到sentinel值:

for x in iter(foo, 0):
    print x

下面是itertools解决方案的外观,iter()绝对更干净,但这允许您测试任何错误的返回:

^{pr2}$

相关问题 更多 >