我有以下代码不适用于我:
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
值。你知道吗
最内部的生成器不会生成任何内容;当
n > 0
为false时,函数将返回。因此,外部生成器函数没有什么可循环的。你知道吗假设您调用了
bitmask_generator(1)
;它将调用bitmask_generator(0)
两次。每一个这样的生成器都会产生一个空序列,因此bitmask_generator(1)
堆栈帧中的for
循环都没有可循环的内容,因此永远不会到达yield
。你知道吗您需要在第一个for语句之前添加yield语句。这是递归生成器的一个要求。你知道吗
相关问题 更多 >
编程相关推荐