你能从 lambda 函数中产生吗?

Can you yield from a lambda function?

我在 class:

中有一个生成器函数
self.s = [['a',1],['b',2],['c',3]

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

在另一个函数中我将它初始化为一个变量:

var = self.generator()

并根据需要生成:

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

但是,可以在一行中定义生成器吗?我考虑了以下内容:

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

这是我正在使用的最小代码:

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)

输出如下:

1
2
3

我只是想看看我是否可以摆脱 Foo.generator 而改为在一行中声明生成器。

您返回的是列表理解。你可以这样做:

var = (r for r in self.s)

这将生成一个包含您想要的值的生成器。你稍后用 next(var) 在你的代码中测试它。