【发布时间】:2011-06-10 02:57:49
【问题描述】:
我对编程还很陌生,而且我已经使用 Python 工作了几个月了。我正在尝试获得一个与 Stackless 一起使用的概念,但就是不知道如何(尽管我已经写了 other test scripts 与 Stackless 一起使用)。
Anywho,作为一个简化的示例,考虑以下代码,该代码遍历一个列表并通过递归调用相同的函数来找到它的所有排列(编辑: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 是我能想到的最好的了,但不管我怎么安排都失败了。这是许多尝试之一,我不妨把意大利面扔到墙上。)
奖励 e-cookie 用于在不使用bounceBack 功能的情况下执行此操作 - 我还没有找到一种方法让单个 tasklet 在没有一个的情况下多次将信息传递给它自己。
感谢您的宝贵时间!
【问题讨论】:
-
我对 Stackless Python 一无所知,但我觉得我应该做一些小笔记。首先,我建议不要使用
main作为变量名。其次,这不计算排列,它计算 n 元素列表的 n 维笛卡尔积。 (5 元素列表只有 120 种排列。)第三,recursion 和 concurrency 根本不一样。抱歉,我无法解决您遇到的主要问题! -
对于使用'main',这是有道理的,我会记住的。至于笛卡尔积......我不能保证我会记住这个词,但我会尽量记住差异。递归和并发之间的差异也是如此。在自学时很难把所有的词都说对,但我会尽力而为。谢谢!
标签: python recursion concurrent-programming stackless python-stackless