如何使该范围起作用。每当我限制n
时,它都会无限制地给出所有结果。
# This is to show you
def generator(f, n, *args, **kwargs):
return (f(*args, **kwargs) for __ in range(n))
# This is the problem
target1 = Destination.objects.all()
for field in target1:
[Destination(img = f'{field.img}',title = f'{field.title}') for __ in range(2)]
答案 0 :(得分:2)
您只需将[]
更改为()
,即可将其从列表理解转换为generator expression:
def generator(f, n, *args, **kwargs):
return (f(*args, **kwargs) for __ in range(n))
例如:
def f(b, a):
return a+b
def generator(f, n, *args, **kwargs):
return (f(*args, **kwargs) for __ in range(n))
g = generator(f, 5, "bar", a="foo")
list(g)
# ['foobar', 'foobar', 'foobar', 'foobar', 'foobar']
答案 1 :(得分:1)
我认为您想做的是制造发电机。生成器通过汇总生成的每个结果来工作。它们的状态一直保存到您每次调用它们时,因此在上次调用yeild
之后会恢复它们的状态。有关生成器的更多信息,请阅读this。
这是实现此代码的代码:
def generator(f, n, *args, **kwargs):
for __ in range(n):
yield f(*args, **kwargs)