我对编程相当陌生,现在我已经用Python工作了几个月。我试图让一个概念与Stackless一起工作,但是却无法弄清楚(虽然我写了other test scripts与Stackless一起工作)。Stackless Python - 递归for循环?
作为一个简化的例子,任何人都应该考虑下面的代码,该代码遍历一个列表,并通过递归调用相同的函数找到它的所有排列(编辑:n维笛卡尔乘积)。
def traverseList(theList,temp,solutions,level=1):
if level != len(theList):
for x in theList:
temp.append(x)
traverseList(theList,temp,solutions,level+1)
temp.pop()
else:
for x in theList:
temp.append(x)
solutions.append(temp[:])
temp.pop()
myList = ["a",None,2,"gamma",8] #the list doesn't always have just numbers
solutionList = []
tempList = []
traverseList(myList,tempList,solutionList)
print("%s... %s" %(solutionList[0], solutionList[-1]))
这将产生:
['a', 'a', 'a', 'a', 'a']... [8, 8, 8, 8, 8]
到目前为止,似乎我找到Stackless的和递归的唯一实例具有的功能在函数结束的信息发送出去这一切都完成之后。从不在for循环的中间,就像上面的那样。
如何赫克我会做到这一点?我将如何将它变成一个脚本,可以使用tasklet而不是递归函数运行? (This version是我能想到的最好的,但是无论我怎么安排它都会失败,这是很多次尝试中的一次,我不妨把意大利面扔在墙上)
Bonus e- cookie的方式来做到这一点没有bounceBack功能 - 我还没有找到一种方法让一个单独的tasklet多次传递信息给自己,没有一个。
谢谢你的时间!
我知道字面上一无所知Stackless的Python,但我觉得我应该做一些轻微的音符。首先,我建议不要使用'main'作为变量名称。其次,它不计算排列,它计算n元素列表的n维笛卡尔乘积。 (一个5元素列表只有120个排列)。第三,[递归](http://en.wikipedia.org/wiki/Recursion_(computer_science))和[concurrency](http://en.wikipedia。 org/wiki/Concurrency_(computer_science))并不完全相同。抱歉,我无法帮助您解决主要问题! – senderle 2011-06-10 03:44:04
对于使用'主',这是有道理的,我会牢记它。至于笛卡尔产品......我不能保证我会记住这个词,但我会尽量记住它们之间的差异。递归与并发之间的差异相同。在教自己的时候很难把所有的单词都讲清楚,但我会尽我所能。谢谢! – squid808 2011-06-10 12:13:41