python – 在这个排列生成器中’yield’如何工作?

def perm_generator(lst):
    if len(lst) == 1:
        yield lst
    else:
        for i in range(len(lst)):
            for perm in perm_generator(lst[:i] + lst[i+1:]):
                yield [lst[i]] + perm

这段代码一直困扰着我,因为我不明白产量如何相互连接.我的理解是,收益就像一个回报,但它会暂时停止,直到再次被召回.这些收益率如何运作?

解决方法

它可能有助于查看不使用生成器的版本:

def perm_generator(lst):
    res = []
    if len(lst) == 1:
        return [lst]
    else:
        for i in range(len(lst)):
            for perm in perm_generator(lst[:i] + lst[i+1:]):
                res.append([lst[i]] + perm)
    return res

gen = perm_generator([1,2,3])
print gen # prints [[1,3],[1,3,2],[2,1,1],[3,1]]

正如你所看到的 – 这不是“回归”与“收益”的“发现和替换”.在“返回”版本中,我们需要累积结果,而在“yield”版本中,所有需要做的就是“产生”当前的排列.

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...