Python - à l'aide d'une variable partagée dans une fonction récursive

Je suis en utilisant une fonction récursive pour trier une liste en Python, et je veux garder une trace du nombre de sortes/fusionne que la fonction est continue. Cependant, lorsque je déclare/initialisation de la variable à l'intérieur de la fonction, il devient une variable locale à l'intérieur de chaque appel de la fonction. Si je déclare la variable en dehors de la fonction, la fonction pense qu'il n'existe pas (c'est à dire n'a pas d'accès). Comment puis-je partager cette valeur à travers les différents appels de la fonction?

J'ai essayé d'utiliser le "global" variable de l'étiquette à l'intérieur et à l'extérieur de la fonction comme ceci:

global invcount  ## I tried here, with and without the global tag

def inv_sort (listIn):
    global invcount   ## and here, with and without the global tag

    if (invcount == undefined):  ## can't figure this part out
        invcount = 0

    #do stuff

Mais je ne peux pas comprendre comment vérifier le statut non défini de la variable globale et de lui donner une valeur à la première récursivité appel (parce que sur toutes les récurrences il doit avoir une valeur et être défini).

Ma première pensée a été pour revenir à la variable de sortie de chaque appel de la fonction, mais je ne peux pas comprendre comment passer deux objets de la fonction, et j'ai déjà passer la liste de la récursion de tri de travail. Ma deuxième tentative pour résoudre ce problème je m'implique l'ajout de la variable invcount à la liste je suis de passage comme le dernier élément avec un identifiant, comme "i27". Ensuite, j'ai pu seulement de vérifier la présence de l'identifiant (la lettre i dans cet exemple) dans le dernier élément et pop() au début de l'appel de la fonction et ajouter de nouveau au cours de la récursivité. Dans la pratique, cela devient vraiment compliqué et il peut éventuellement travailler, je me demandais si il n'y est plus pratique, plus facile solution.

Est-il un moyen de partager une variable sans directement en passant/le retour?

Quelle est votre fonction actuellement de retour? Est-il muter listIn ou crée et retourne une nouvelle liste?
Eh bien, je suppose qu'il retourne une nouvelle liste, car j'ai créer un nouvel objet de liste de revenir, mais il utilise les mêmes éléments de la liste d'entrée et ajoute simplement dans l'ordre de tri de la nouvelle liste. En entrée une liste et la fonction des sorties de la liste dans l'ordre de tri. Je l'ai sortie de la liste dans l'ordre correctement maintenant, mais je viens d'avoir un problème de le faire pour compter le nombre de swaps ou des inversions dans le processus de commande, qui était à l'affectation dans mon algorithmes de la classe.

OriginalL'auteur Alium Britt | 2014-05-20