python中的生成器未按预期工作

2024-09-27 23:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码不适用于我:

def bitmask_generator(n):
    if n > 0:
        for x in bitmask_generator(n-1):
            yield 1 + (x << 1)
        for x in bitmask_generator(n-1):
            yield x << 1

...

for x in bitmask_generator(5):
    print x

该代码应该生成长度为n的所有可能的位掩码。但是,它不打印任何内容。我做错什么了?你知道吗

更新:在bitmask_generator的第一行添加print(n)实际上会打印一堆n值。你知道吗


Tags: 代码in内容forifdefgeneratorprint
2条回答

最内部的生成器不会生成任何内容;当n > 0为false时,函数将返回。因此,外部生成器函数没有什么可循环的。你知道吗

假设您调用了bitmask_generator(1);它将调用bitmask_generator(0)两次。每一个这样的生成器都会产生一个空序列,因此bitmask_generator(1)堆栈帧中的for循环都没有可循环的内容,因此永远不会到达yield。你知道吗

您需要在第一个for语句之前添加yield语句。这是递归生成器的一个要求。你知道吗

def exampleGen(item):
    yield item

    for x in exampleGen(getNextValueFuntion(x)):
        yield x

相关问题 更多 >

    热门问题