你能从 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)
在你的代码中测试它。
我在 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)
在你的代码中测试它。