毕业季怒补了一个月旧番,死宅了一段时间后打不起精神看点有营养的书就找了个一个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:毕业狂欢季过的好爽啊,别了大武汉~~