如何使范围数在发电机中起作用

时间:2019-07-16 04:05:29

标签: python html django

如何使该范围起作用。每当我限制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)]

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)