我有以下功能:
def infinite_sequence(starting_value, function):
value = starting_value
while True:
yield value
value = function(value)
有没有可能把这表达成一种理解?如果我们处理的是一个固定范围,而不是一个无限序列,它可以这样处理:(编辑:实际上那是错误的)
(function(value) for value in range(start, end))
但既然我们处理的是一个无限序列,有没有可能用生成器来表达呢?你知道吗
这是
itertools.accumulate
,忽略除第一个值以外的所有值:不过,请把它全部写出来。你知道吗
您需要某种递归生成器表达式:
其中
__currentgenerator__
是对它所在的生成器表达式的一个假设的魔法引用。(请注意,问题不是您想要一个无限序列,而是该序列是根据自身递归定义的。)不幸的是,Python没有这样的特性。Haskell就是这样一种语言的例子,由于其懒惰的参数求值:
但是,通过定义递归生成器,您仍然可以在python3中实现类似的功能,同时仍然使用
def
语句。你知道吗(
itertools.chain
不是绝对必要的;您可以使用但我试图保留Haskell表达式的味道
x:infinite_sequence
。)是的,只要使用无限迭代器,比如^{} 。你知道吗
相关问题 更多 >
编程相关推荐