gpt4 book ai didi

python - 这个函数可以用生成器理解来表达吗?

转载 作者:行者123 更新时间:2023-11-28 19:20:13 25 4
gpt4 key购买 nike

我有以下功能:

def infinite_sequence(starting_value, function):
value = starting_value
while True:
yield value
value = function(value)

是否可以将其表达为生成器理解?如果我们处理的是固定范围,而不是无限序列,则可以这样处理:(编辑:实际上这是错误的)

(function(value) for value in range(start, end))

但由于我们正在处理无限序列,是否可以使用生成器理解来表达它?

最佳答案

你需要某种递归生成器表达式:

infinite_sequence = itertools.imap(f, itertools.chain(x, __currentgenerator__))

其中 __currentgenerator__ 是对它所在的生成器表达式的假设魔术引用。(请注意,问题不是您想要一个无限序列,而是序列是根据自身递归定义的.)

不幸的是,Python 没有这样的特性。 Haskell 是这样的语言的一个例子,因为它的惰性参数评估:

infinite_sequence = map f x:infinite_sequence

但是,通过定义递归生成器,您仍然可以在使用 def 语句的同时在 Python 3 中实现类似的功能。

def infinite_sequence(f, sv):
x = f(sv)
yield from itertools.chain(x, infinite_sequence(f, x))

(itertools.chain 不是绝对必要的;您可以使用

def inifinite_sequence(f, sv):
x = f(sv)
yield x
yield from infinite_sequence(f, x)

但我试图保留 Haskell 表达式 x:infinite_sequence 的风格。)

关于python - 这个函数可以用生成器理解来表达吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26946306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com