2016-12-15 1 views
0

Jetzt weiß ich über globale Deklarationen, und kann auch herausfinden, warum ein Fehler auftaucht (Count ist in der Funktion referenziert und ich rufe es später), aber es gibt keine Möglichkeit, es zu umgehen. Warum gibt count einen Fehler, obwohl ich die Funktion f aufrufen, nachdem ich die Variable definiert? Wie kann ich dieses Code-Snippet umschreiben? Danke für die Hilfe!Variabler Referenzfehler: Wie mache ich das?

def f(x): 
    if count < x: 
     <some irrelevvant code> 

for i in range(10): 
    count = 1 
    f(3) 
    <some more irrelevant code> 

Entschuldigung, ich denke meine ursprüngliche Frage war irgendwie unklar. Der „irrelevant Code“ Ich erwähnte tatsächlich relevant sein könnte, daher bin Hochladen ich meinen ganzen Code:

def ways(l, h): 
    if count2 < h: 
     for v in A: #A is a globally defined list 
      if u != v: 
       if check(t, v): 
        count2 += 1 
        t = v 
        ways(l, h) 
    else: 
     count1 += 1 

count1 = 0 
for u in A: 
    count2 = 1 
    t = u 
    ways(9, 3) 

Nun, da ich rekursiv die Funktion ways Aufruf bin, kann ich nicht count2 als Funktionsargument in ways definiert haben. Count2 muss jedes Mal auf 1 zurückgesetzt werden, wenn die u for-Schleife ausgeführt wird, aber nicht, wenn ways aufgerufen wird.

+1

Sie übergeben 'count' explizit in' f'. – jonrsharpe

+0

in loop, + f (3, count) –

+1

Sie können 'count = 1' vor dem Definieren von' f (x) 'tun, es wird funktionieren, aber Sie sollten das nicht tun, besser 'count' zu' f 'explizit, da' Explizit ist besser als implizit ' –

Antwort

1
def f(x,count): 
    if count < x: 
     <some irrelevant code> 

for i in range(10): 
    count = 1 
    f(3,count) 
    <some more irrelevant code> 

In der Funktion "local" zählen. Wenn Sie Count zu Funktion f übergeben, gibt es keine Notwendigkeit, es global zu machen, und es sollte gut funktionieren.

+0

Ich habe ein bisschen mehr Details in der Frage hinzugefügt. Ich glaube nicht, dass dieser Ansatz funktionieren wird, da die Funktion rekursiv aufgerufen wird. – Sphener

Verwandte Themen