2017-03-05 6 views
0

Also ich bin ein Anfänger, und das ist für eine Klasse, die ich nehme. Ich weiß, über return, aber es ließ mich nicht tun, was ich versuche in diesem Stück Code zu tunZugriff auf Funktionsvariable außerhalb der Funktion?

Dies ist die Funktion, die die Variable enthält:

def disp_cookies(): 
    # This stuff is just for a print display 
    inx = 0 # Displays list vertically 
    while inx < len(flavor_names): 
     print("{}. {}".format(inx + 1, flavor_names[inx])) 
     inx += 1 

    valid_data = False 
    while not valid_data: 
     try: 
      # This is the variable I need 
      flavor = int(input("\nSelect a number for flavor> ")) 

      if 0 < flavor <= len(flavor_names): 
       item_list.append(flavor) 
       print(flavor_names[int(flavor) - 1]) 
       return flavor # This is the return 
       break 

     except Exception: 
      print("\nError. Please try again") 
     else: 
      print("\nPlease enter a valid response") 

Und hier, wo ich versuche, die Variable zu verwenden:

print("\n", flavor) # This is outside of the function in the previous snippet btw 
print("\n{}s, {} box(es), ${} total".format(flavor_names[flavor - 1], qty_list[order_no], item_total)) 

Dies ist der Fehler, den ich bekommen:

Traceback (most recent call last): 
    File "C:\Users\wiche\Documents\School\Python CIS122\L8_orderCost.py", line 95, in <module> 
    print("\n", flavor) 
NameError: name 'flavor' is not defined 

Ich kann den Fehler loswerden, indem ich flavor außerhalb der Funktion definiere, aber dann sind die Daten in der Variablen falsch, wenn ich sie benutze. Irgendeine Idee, was ich tun kann, um es zu reparieren?

Denken Sie daran, ich bin ein absoluter Anfänger, was Sie sehen im Grunde alles, was ich von Python zu verstehen, so weit

Thank you!

Antwort

1

Variablen innerhalb von Funktionen verschwinden ("out of scope"), wenn die Funktion zurückkehrt.

Um einen Wert aus einer Funktion zu erhalten, müssen Sie zwei Dinge tun:

  1. In der Funktion - return ein Wert oder Wert.

  2. Wenn Sie die Funktion aufrufen - speichern Sie den Wert oder die Werte. Sie tun dies, indem Sie eine Variable gleich dem Ergebnis der Funktion setzen: flavour = display_cookies().

Betrachten Sie dieses Beispiel:

def answer_to_life(): 
    answer = 42 
    return answer 

ans = answer_to_life() 
print (ans)    # output: 42 

Bitte beachte, dass ich einen anderen Variablennamen innerhalb der Funktion verwendet haben (answer) und außen (ans). Sie könnten den gleichen Namen verwenden, aber das kann Sie früh in Ihrer Ausbildung verwirren.

+0

Vielen Dank für Ihre Antwort !! Jetzt habe ich ein neues Problem. Ich habe den aktualisierten Code wie folgt: 'flavour = disp_cookies()' 'drucken (" \ n ", Geschmack)' 'drucken (" \ n {} s, {} Box (es), $ {} gesamt".Format (flavor_names [Geschmack], qty_list [order_no], item_total)) ' Aber jetzt bekomme ich diesen Fehler: Indexerror: Listenindex außerhalb des zulässigen Bereichs Nenne ich die Variable irgendwie falsch? – tonberryking

+0

@tonberryking, bitte fragen Sie dies als eine separate Frage. Es ist schwierig, Probleme in Kommentaren zu beheben - ich kann den Code nicht kopieren und aus einem Kommentar einfügen und ausführen! Wenn Sie Ihr Programm auf ein [kleines, in sich geschlossenes Beispiel] (http://sscce.org/) reduzieren, erhalten Sie eine schnelle Antwort. –

0

Dies ist ein Problem mit dem Oszilloskop. Sie müssen Variablen namens Geschmack haben. Eins im globalen und eins im Funktionsumfang.

Wenn Sie auf die globale Variable innerhalb Ihrer Funktion zugreifen möchten, benötigen Sie das Schlüsselwort 'global' in der Funktion.

Die andere Möglichkeit besteht darin, den Rückgabewert Ihrer Funktion dem globalen Variablenaroma zuzuordnen.

Eine vollständige Erläuterung mit Beispielen finden Sie unter [http://python-textbok.readthedocs.io/en/1.0/Variables_and_Scope.html#more-about-scope-crossing-boundaries].

Verwandte Themen