[Python] Can you yield from a lambda function?

Discussão em 'Python' iniciado por Stack, Junho 23, 2025.

  1. Stack

    Stack Membro Participativo

    I have a generator function in a class:

    self.s = [['a',1],['b',2],['c',3]

    def generator(self):
    for r in self.s:
    yield r


    In another function I initalize it as a variable:

    var = self.generator()


    And it's yielded as necessary:

    >>> next(var) # returns ['a',1]
    >>> next(var) # returns ['b',2]
    >>> next(var) # returns ['c',3]


    Can defining the generator be done in one line, however? I've considered the below:

    var = lambda: [(yield r) for r in self.s]
    >>> next(var) # SyntaxError: 'yield' inside list comprehension


    Here's a minimal code I'm working with:

    class Foo():
    def __init__(self):
    self.s = {}

    def generator(self):
    for r in self.s:
    yield r

    def fetch(self):
    if not self.s:
    self.fetch_gen = self.generator()
    self.s['a'] = 1
    self.s['b'] = 2
    self.s['c'] = 3
    try:
    var = self.s.get(next(self.fetch_gen))
    except StopIteration:
    return None
    return var

    BAR = Foo()
    while True:
    OUT = BAR.fetch()
    if OUT is None:
    break
    print(OUT)


    Output is below:

    1
    2
    3


    I just wanted to see if I could get rid of Foo.generator and instead declare the generator in one line.

    Continue reading...

Compartilhe esta Página