Converting a yield statement to a Generator Expression in Python

跟風遠走 提交于 2019-12-24 03:42:36

问题


I have a question regarding converting a yield statement to a generator expression

So I have this small yield method that gets a function and a starting number as its inputs, and basically calls the function for each previous number that was called i.e:

  • The first call returns the initial number
  • The second call returns the function(initial number)
  • The third call returns the function(second number)
  • The fourth call returns the function(third number)

etc. Here is the code in Python:

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

What are the ways of converting this snippet into a Generator Expression? I'm guessing that there is a very pythonic and elegant way of doing this, but I just can't get my head around it.

I am quite unfamiliar with Generator Expressions, hence why I'm asking for help but I do want to expand my knowledge of Gen Exp in general and of Python in particular


回答1:


Stick to what you have now. You could convert the function to a generator expression but it'd be an unreadable mess.

Generator expressions need another iterable to loop over, which your generator function doesn't have. Generator expressions also don't really have access to any other variables; there is just the expression and the loop, with optional if filters and more loops.

Here is what a generator expression would look like:

from itertools import repeat

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

where we abuse number as a 'variable'.



来源:https://stackoverflow.com/questions/20300101/converting-a-yield-statement-to-a-generator-expression-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!