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

python中的生成器未按预期工作,python,generator,Python,Generator,我有以下不适用于我的代码: 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): pr

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

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
def位掩码生成器(n): 如果n>0: 对于位掩码生成器(n-1)中的x:
yield 1+(x最里面的生成器将不会生成任何内容;当
n>0
为false时,函数将返回。因此,外部生成器函数没有可循环的内容


假设您调用了
bitmask\u生成器(1)
;它将调用
bitmask\u生成器(0)
两次。每个这样的生成器将生成一个空序列,因此
bitmask\u生成器(1)中的
for
循环
堆栈帧没有可循环的内容,因此不会达到
收益率。

您需要在第一个for语句之前添加一个收益率语句。这是递归生成器的要求

def exampleGen(item):
    yield item

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

难道不能用
xrange替换整个发电机吗(1@user2357112这是可以的,但是我的实际代码计算了所有的长度为<代码> n>代码>和<代码> M>代码>位设置的位图;上面的代码只是我能想出的一个最小的例子,它可以再现我的问题。在这种情况下,你可能想考虑使用设置位的位置。@ USSRe550112:已经尝试过了,但是它很S。与手动设置位相比,该值较低…真的吗?我希望itertools.compositions([1])中的tup具有类似
(sum(x))的值