2010-10-25 9 views
0

J'ai une fonction similaire à ce qui suit:fonction python problématique renvoie

def getCost(list): 
    cost = 0 
    for item in list: 
    cost += item 
    return cost 

et je l'appelle comme ceci:

cost = getCost([1, 2, 3, 4]) 

Ceci est très simplifié, mais il illustre ce qui se passe. Peu importe ce que je fais, le coût finit toujours == 0. Si je change la valeur du coût dans la fonction pour dire 12, alors 12 est retourné. Si je débogue et regarde la valeur de coût avant le retour, coût == 10

Il semble qu'il renvoie toujours le nombre défini pour le coût, et complètement sans tenir compte de toutes les modifications à lui. Quelqu'un peut-il me dire ce que cela causerait?

+2

Le code fonctionne pour moi (notez que vous ne devriez pas nommer une variable 'list'). – bernie

+0

Il manque quelque chose Quand j'ai essayé l'échantillon,' cost == 10' après l'appel – outis

+3

Je crains que vous aurez besoin de poster plus de code ... la méthode définie ci-dessus (littéralement couper et coller dans python 2.6 et 3.1 et obtenu expec comportement du ted) – cwallenpoole

Répondre

2

Cela devrait résoudre tous vos problèmes (si la somme des éléments de liste dans le coût est bien ce que vous essayez de faire.

def getCost(costlist): 
    return sum(costlist) 

Il accomplit exactement les mêmes choses et est garanti pour fonctionner Il est également beaucoup plus simple que d'utiliser une boucle et un accumulateur

+3

Ou même simplement: 'getCost = sum' –

+0

Je ne veux tout simplement pas casser tout son code qui fait référence à getCost(). –

+0

Vous pouvez assigner des fonctions comme celle de Python, et toujours appeler 'getCost()' (cela fera exactement la même chose que 'sum()'). –