在Python中将yield语句转换为Generator表达式

时间:2013-11-30 12:13:14

标签: python python-3.x generator yield generator-expression

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

所以我有一个小的yield方法,它得到一个函数和一个起始数作为它的输入,并且基本上调用了每个被调用的前一个数字的函数,即:

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

等。 这是Python中的代码:

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

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

我对Generator Expressions非常不熟悉,因此我寻求帮助但我确实希望扩展我对Gen Exp的了解,特别是Python的知识

1 个答案:

答案 0 :(得分:5)

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

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

这是生成器表达式的样子:

from itertools import repeat

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

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