2

我有一个关于将 yield 语句转换为生成器表达式的问题

所以我有这个小的 yield 方法,它获取一个函数和一个起始数字作为它的输入,并且基本上为每个之前调用的数字调用该函数,即:

  • 第一次调用返回初始数字
  • 第二次调用返回函数(初始编号)
  • 第三次调用返回函数(第二个数字)
  • 第四个调用返回函数(第三个数字)

等等。这是 Python 中的代码:

def some_func(function, number):
    while True:
        yield number
        number = function(number)

将此代码段转换为生成器表达式的方法是什么?我猜有一种非常pythonic和优雅的方式来做到这一点,但我就是无法理解它。

我对生成器表达式很不熟悉,因此我为什么要寻求帮助,但我确实想扩展我对 Gen Exp 的一般知识,特别是 Python 的知识

4

1 回答 1

5

坚持你现在拥有的。您可以将该函数转换为生成器表达式,但这将是一个难以理解的混乱。

生成器表达式需要另一个迭代器来循环,而你的生成器函数没有。生成器表达式也不能真正访问任何其他变量。只有表达式和循环,还有可选的if过滤器和更多的循环。

下面是生成器表达式的样子:

from itertools import repeat

number = [number]
gen = ((number[0], number.__setitem__(0, function(number[0]))[0] for _ in repeat(True))

我们滥用number“变量”的地方。

于 2013-11-30T12:26:36.127 回答