是否有内置函数或标准库函数大致等同于
def recur_until(start, step_fu, stop_predicate=lambda _: False):
current = start
while not stop_predicate(current):
yield current
current = step_fu(current)
或者
def recur_while(start, step_fu, predicate=lambda _: True):
current = start
while predicate(current):
yield current
current = step_fu(current)
或者仅仅是
def recur(start, step_fu):
current = start
while True:
yield current
current = step_fu(current)
在任何版本的Python中都可以使用吗?(如果与
itertools.takewhile
结合使用,后者与前两者一样好。)像这样的生成器函数可以允许迭代计算某些递归定义的序列,即一阶递推关系。
虽然这些不是太难实现,但我觉得像它们这样的东西应该是
itertools
或functools
的一部分,但如果是的话,我还没有在文档中找到它。
使用示例:
list(recur_until(2, lambda x: x**2 - 1, lambda x: x > 1e4))
# [2, 3, 8, 63, 3968]
应该也适用于非数字元素:
list(recur_until('', lambda x: '[{}]({})'.format(x, len(x)), lambda x: len(x) > 30))
# ['',
# '[](0)',
# '[[](0)](5)',
# '[[[](0)](5)](10)',
# '[[[[](0)](5)](10)](16)',
# '[[[[[](0)](5)](10)](16)](22)']
iterate
函数等效。iterate(\ x-> x + 1)0 = 0,1,2,3,4,5,...
- chepneriterate
与takeWhile
的组合。 - Sven Marnach