在Python中将yield语句转换为生成器表达式

在Python中将yield语句转换为生成器表达式,python,python-3.x,generator,yield,generator-expression,Python,Python 3.x,Generator,Yield,Generator Expression,我有一个关于将收益率语句转换为生成器表达式的问题 所以我有一个小的收益率方法,它获取一个函数和一个起始数字作为输入,基本上为之前调用的每个数字调用函数,即: 第一个呼叫返回初始号码 第二个调用返回函数(初始编号) 第三个调用返回函数(第二个数字) 第四个调用返回函数(第三个数字) 等等。 以下是Python中的代码: def some_func(function, number): while True: yield number number = f

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

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

  • 第一个呼叫返回初始号码
  • 第二个调用返回函数(初始编号)
  • 第三个调用返回函数(第二个数字)
  • 第四个调用返回函数(第三个数字)
等等。 以下是Python中的代码:

def some_func(function, number):
    while True:
        yield number
        number = function(number)
将此代码段转换为生成器表达式的方法有哪些? 我猜这是一种非常优雅的方式,但我就是想不起来


我对生成器表达式非常不熟悉,因此我请求帮助,但我确实希望扩展我对Gen Exp的一般知识,特别是Python的知识,请坚持使用您现在掌握的内容。您可以将函数转换为生成器表达式,但这将是一个无法读取的混乱

生成器表达式需要另一个iterable来循环,这是生成器函数所没有的。生成器表达式也不能访问任何其他变量;只有表达式和循环,带有可选的
if
过滤器和更多循环

以下是生成器表达式的外观:

from itertools import repeat

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

我们滥用
number
作为“变量”。

生成器表达式没有像局部变量那样的“内存”,它们也不能递归地调用自己。也许我会对这些答案感到惊讶,但在我看来,你的函数已经是优雅的python方式了。生成器表达式需要A)另一个iterable循环,b)无法访问其他变量。我会坚持使用函数的原样。您可以查看答案,并将其周围环绕
(x代表x)。最近,很多人都在问同一个问题,尽管他们倾向于说“不使用收益率”和“不使用基因XP”。Eek。这有点像Python中的Perl编程。。。G