6
11
2013
0

[初学Python]遇到的一个关于yield的问题

    毕业季怒补了一个月旧番,死宅了一段时间后打不起精神看点有营养的书就找了个一个Python的pdf每天翻几页。

    yield这个东西之前在MS实习时候接触过但是被我无视掉了(C#)中,看python时候发现这个貌似很犀利的样子。

    写了一个返回n个数全排列的代码,开始相当然的写成了这个样子

def dfs(stp, n, now, vis):
    if stp == n:
        yield now
        return
    for i in range(1, n + 1):
        if vis[i] == True: continue
        vis[i] = True
        dfs(stp + 1, n, now + [i], vis):
        vis[i] = False



def P(n):
    vis = [False] * (n + 1)
    return dfs(0, n, [], vis)

然后很蛋疼的发现压根不work,仔细想了下,因为dfs实际上已经是generator function了,所以递归调用时候只返回了一个iterator压根没进去,所以改成这个样子就好了。

def dfs(stp, n, now, vis):
    if stp == n:
        yield now
        return
    for i in range(1, n + 1):
        if vis[i] == True: continue
        vis[i] = True
        for r in dfs(stp + 1, n, now + [i], vis):
            yield r
        vis[i] = False



def P(n):
    vis = [False] * (n + 1)
    return dfs(0, n, [], vis)


PS:毕业狂欢季过的好爽啊,别了大武汉~~

Category: 算法与数据结构 | Tags: | Read Count: 1193

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com