Python 在递归中使用yield时平衡内存和性能

Python 在递归中使用yield时平衡内存和性能,python,algorithm,recursion,time-complexity,yield,Python,Algorithm,Recursion,Time Complexity,Yield,我有一个函数可以产生置换: def all_perms(str): if len(str) <=1: yield str else: for perm in all_perms(str[1:]): for i in range(len(perm)+1): yield perm[:i] + str[0:1] + perm[i:] def all_perms(str): 如果len(str

我有一个函数可以产生置换:

def all_perms(str):
    if len(str) <=1:
        yield str
    else:
        for perm in all_perms(str[1:]):
            for i in range(len(perm)+1):
                yield perm[:i] + str[0:1] + perm[i:]
def all_perms(str):
如果len(str)如果您检查,您将看到
yield
冻结生成器的状态。当控制流返回时,就好像它是一个外部调用,因此所有状态都保持不变

因此,由于在运行时复杂性方面没有差异,所以我不会太担心列表和生成器之间的性能差异。如果您要查看大型集合,那么生成器的内存节省方面值得考虑,并且可以创建“无限”集合

另外,
itertools.permutations