2016-06-20 11 views
0

Ich Funktionen ähnlich denen Aufruf, die folgen, in einer Schleife:Dekrementoperatoren Funktionsargumente (PYTHON)

def bigAnim(tick,firstRun): 
     smallAnim(x,y,duration) 
     #more anims and logic... 



    def smallAnim(x, y,duration): 
     duration -= 1 
     if duration != 0: 
      Anim.blit(screen,(x ,y)) 
      Anim.play() 


     else: 
      Anim.stop() 
      loopedOnce = True 
      return loopedOnce 

Nun sage ich das smallAnim innerhalb der großen anim nennen waren wie folgt:

def bigAnim(tick,firstRun): 
     smallAnim(0,50,5) 

smallAnim wird jetzt auf unbestimmte Zeit aufgerufen, da die Dauer nie kleiner als 4 wird (wird bei jedem Aufruf in der Schleife auf 5 zurückgesetzt). Was wäre der beste Weg, um dieses Problem zu lösen?

+0

Dont passieren Dauer in als ‚5‘ .. anstatt es als eine Variable übergeben, die verringert werden kann und neu bewertet bei seiner nächsten Iteration? – AK47

Antwort

1

Sie müssen die Zählung in durchführen und nur smallAnim() aufrufen, wenn der Wert größer als Null ist.

Oder Sie können die aktuelle Dauer zurück:

def bigAnim(tick,firstRun): 
    duration = smallAnim(x,y,duration) 
    #more anims and logic... 

def smallAnim(x, y, duration): 
    duration -= 1 
    if duration > 0: 
     Anim.blit(screen,(x ,y)) 
     Anim.play() 
    return duration 

Ihr zugrunde liegende Problem ist Python does pass the references to the variables, but integers are immutable.

Dies ist ein wenig leichter mit Streichern zu verstehen:

Die Funktion

def foo(s): 
    s = " world" 

wird nur s lokal ändern zu der Funktion, wenn Sie foo("hello") aufrufen. Das typische Muster, das Sie stattdessen sehen werden ist:

def foo(s): 
    return s + " world" 

Und dann ... print foo("hello")