Python中Yield的替代品

时间:2014-05-27 04:44:25

标签: python yield

是否有另一种(即使更长)的方法来编写此代码的yield部分?我对这个功能不太熟悉,宁愿保持简单。

for i in range(0, len(lstInput) - intCount + 1):
    if intCount == 1:
        yield [lstInput[i]]
    else:
        current = lstInput[i]
        remainder = lstInput[i+1:]
        for rest in yieldLotto(remainder, intCount - 1):
            yield [current] + rest

1 个答案:

答案 0 :(得分:3)

另一种方法是将循环嵌入到调用程序中,或者将其更改为返回列表。但这意味着一切都将进入记忆中。

def foo():
    return_list = []
    for i in range(0, len(lstInput) - intCount + 1):
        if intCount == 1:
            return_list.append([lstInput[i]])
        else:
            current = lstInput[i]
            remainder = lstInput[i+1:]
            for rest in yieldLotto(remainder, intCount - 1):
                return_list.append([current] + rest)
    return return_list

老实说,我觉得收益率更高,这是Python的一个重要特征。我建议学习它。