Je suis relativement nouveau en programmation et je travaille avec Python depuis quelques mois maintenant. J'essaie de faire fonctionner un concept avec Stackless, mais je n'arrive pas à comprendre comment (même si j'ai écrit other test scripts qui fonctionne avec Stackless). Anywho, dans un exemple réduit, considère le code suivant qui parcourt une liste et trouve toutes les permutations (édition: produits cartésiens ndimensionnels) en appelant la même fonction récursivement.Stackless Python - Récursion dans une boucle for?
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]))
qui donne:
['a', 'a', 'a', 'a', 'a']... [8, 8, 8, 8, 8]
Jusqu'à présent, il semble que les seuls exemples que je trouve avec Stackless et récursion ont la fonction d'envoi d'informations à la fin de la fonction après tout cela se fait. Jamais au milieu d'une boucle for, comme ce serait nécessaire dans le ci-dessus.
Comment diable ferais-je cela? Comment pourrais-je transformer cela en un script qui fonctionnerait avec des tâches plutôt que des fonctions récursives? (This version est le meilleur que je peux trouver, mais il échoue peu importe comment je l'arrange.C'est un des nombreux essais, je peux aussi bien jeter des spaghettis contre un mur à ce stade.)
Bonus e- cookie pour un moyen de le faire sans une fonction bounceBack - Je n'ai pas encore été en mesure de trouver un moyen d'avoir une seule tâche de transmettre des informations à elle-même plusieurs fois sans un.
Merci pour votre temps!
Je ne connais littéralement rien sur Stackless Python, mais je pense que je devrais faire quelques notes mineures. Premièrement, je déconseille d'utiliser 'main' comme nom de variable. Deuxièmement, ceci ne calcule pas les permutations, il calcule le produit cartésien n-dimensionnel d'une liste d'éléments n. (Il n'y a que 120 permutations d'une liste de 5 éléments.) Troisièmement, [récursion] (http://en.wikipedia.org/wiki/Recursion_ (computer_science)) et [concurrent] (http: //en.wikipedia. org/wiki/Concurrency_ (computer_science)) ne sont pas du tout les mêmes. Désolé je ne peux pas aider avec le problème principal que vous rencontrez! – senderle
Pour l'utilisation de 'main', c'est logique, je vais le garder à l'esprit. Quant au produit cartésien ... Je ne peux pas promettre que je me souviendrai du mot, mais j'essaierai de me souvenir de la différence. Idem pour les différences entre la récursivité et la concurrence. Il est difficile d'avoir tous les mots pour enseigner, mais je ferai de mon mieux. Merci! – squid808