在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
- 第一个呼叫返回初始号码
- 第二个调用返回函数(初始编号)
- 第三个调用返回函数(第二个数字)
- 第四个调用返回函数(第三个数字)
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