Hallo in die Runde,
ich beschäftige mich erst seit einigen Tagen mit Python und habe gerade eine Blockade. Unter www.python-lernen.de habe ich das folgende kurze Programm im Abschnitt "Rückgabewert bei Funktionen" gefunden:
def bspfunktionfuerrueckgabe(eingabewert):
rueckgabewert = eingabewert * 2
return rueckgabewert
ergebnisausfunktion = bspfunktionfuerrueckgabe (5)
print(ergebnisausfunktion)
print(rueckgabewert)
Ist mir auch alles klar,
Wenn ich das jetzt bei mir in IDLE unter Python 3.9.7 eingebe und starte bekomme ich folgende Fehlermeldung:
Python 3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
======= RESTART: C:\Users\user\Documents\Python\Variable in Definition.py ======
10
Traceback (most recent call last):
File "C:\Users\user\Documents\Python\Variable in Definition.py", line 7, in <module>
print(rueckgabewert)
NameError: name 'rueckgabewert' is not defined
>>>
Über einen kleinen Gedankenanstoss würde ich mich freuen;=)
Thomas
Anfängerfrage : Variablenübergabe aus einer Definition
Die Einrückung bein Code bleibt bestehen, wenn du ihn in Code-Tags schreibst. Die erscheinen automatisch, wenn du den </>-Button im vollständigen Editor drückst. Dazwischen gehört dein Code.
An der Stelle, wo due "rueckgabewert" ausgeben möchtest, ist diese Variable nicht definiert. Funktionen haben einene eigenen Namensraum. Außerhalb dieses Namensraums existiert dieser Name nicht.
An der Stelle, wo due "rueckgabewert" ausgeben möchtest, ist diese Variable nicht definiert. Funktionen haben einene eigenen Namensraum. Außerhalb dieses Namensraums existiert dieser Name nicht.
-
- User
- Beiträge: 2
- Registriert: Dienstag 5. Oktober 2021, 20:40
Danke für den Tipp mit dem Einrücken, so sieht es dann richtig aus;=)
Wie mache ich es denn richtig, wenn ich in einer Definition eine Variable übergeben will, die ich dann im Hauptprogramm weiter nutzen möchte. Sollte ich die Variable dann auf Global setzen?
Mit besten Grüßen
Thomas :
Code: Alles auswählen
def bspfunktionfuerrueckgabe(eingabewert):
rueckgabewert = eingabewert * 2
return rueckgabewert
ergebnisausfunktion = bspfunktionfuerrueckgabe (5)
print(ergebnisausfunktion)
print(rueckgabewert)
Mit besten Grüßen
Thomas :
Benutze keine Abkürzungen und so lange Funktionsnamen gliedert man am besten mit _: beispielfunktion_fuer_rueckgabe.
Ich denke, das Beispiel soll nur zeigen, dass man `rueckgabewert` nicht verwenden kann, das steht ja so auch im Begleittext. Ebenso, wie es richtig ist, nämlich so, wie es im ersten Abschnitt auf der verlinkten Seite steht.
Leider steht auch auf dieser Seite nicht, dass man niemals (ausdrücklich niemals) `global` verwenden darf (bis auf so wenige Ausnahmen, dass man die erst nach drei Jahren Programmiererfahrung zu Gesicht bekommt). Daher frage ich mich jedesmal, warum das überhaupt bei Anfängertutorials überhaupt vorkommt.
Ich denke, das Beispiel soll nur zeigen, dass man `rueckgabewert` nicht verwenden kann, das steht ja so auch im Begleittext. Ebenso, wie es richtig ist, nämlich so, wie es im ersten Abschnitt auf der verlinkten Seite steht.
Leider steht auch auf dieser Seite nicht, dass man niemals (ausdrücklich niemals) `global` verwenden darf (bis auf so wenige Ausnahmen, dass man die erst nach drei Jahren Programmiererfahrung zu Gesicht bekommt). Daher frage ich mich jedesmal, warum das überhaupt bei Anfängertutorials überhaupt vorkommt.
Hallo Thomas
wenn du sehen möchtest, was in rueckgabewert steht, müsste das imo so aussehen
Global würde wohl auch gehen. Aber ehrlichgesagt, würde ich in meinem Code "gloabal" nur verwenden, wenn ich damit den Weltuntergang verhindern könnte
Ich bin auch Python-Anfänger. Aber mit "global" möchte ich lieber nicht anfangen. Ich weiß zwar nicht wie problematisch das im Python-Universum ist, aber ich vermute mal dass es da auch nicht gern gesehen ist. Es kann zu schwer zu findenden Fehlern führen.
wenn du sehen möchtest, was in rueckgabewert steht, müsste das imo so aussehen
Code: Alles auswählen
def bspfunktionfuerrueckgabe(eingabewert):
rueckgabewert = eingabewert * 2
print(rueckgabewert)
return rueckgabewert
ergebnisausfunktion = bspfunktionfuerrueckgabe (5)
print(ergebnisausfunktion)

Ich bin auch Python-Anfänger. Aber mit "global" möchte ich lieber nicht anfangen. Ich weiß zwar nicht wie problematisch das im Python-Universum ist, aber ich vermute mal dass es da auch nicht gern gesehen ist. Es kann zu schwer zu findenden Fehlern führen.
Hallo Thomas, du braucht die Variable "rueckgabewert" doch gar nicht, das du dessen Wert bereits in "ergebnisausfunktion" geschrieben hast. Daher kannst du jetzt mit "ergebnisausfunktion" weiter arbeiten.
Globale Variablen sind z.B. richtig nervig, wenn man einen Fehler im Programm hat und versucht heraus zu bekommen, wo bzw. wann der falsche Wert in die Variable geschrieben wird.
Globale Variablen sind z.B. richtig nervig, wenn man einen Fehler im Programm hat und versucht heraus zu bekommen, wo bzw. wann der falsche Wert in die Variable geschrieben wird.
Nunja, die Variable "eingabewert", die Du der Funktion übergibst, die kannst Du natürlich weiterverwenden. Das ist in Deinem Beispiel etwas unglücklich, weil Du beim Aufruf der Funktion die Variable "eingabewert" nicht als Variable übergibst, sondern als Konstante ("5"). Wenn Du stattdessenThomas Hoppe hat geschrieben: Mittwoch 6. Oktober 2021, 06:56Wie mache ich es denn richtig, wenn ich in einer Definition eine Variable übergeben will, die ich dann im Hauptprogramm weiter nutzen möchte. Sollte ich die Variable dann auf Global setzen?Code: Alles auswählen
def bspfunktionfuerrueckgabe(eingabewert): rueckgabewert = eingabewert * 2 return rueckgabewert ergebnisausfunktion = bspfunktionfuerrueckgabe (5) print(ergebnisausfunktion) print(rueckgabewert)
Code: Alles auswählen
def bspfunktionfuerrueckgabe(eingabewert):
rueckgabewert = eingabewert * 2
return rueckgabewert
meine_variable = 5
ergebnisausfunktion = bspfunktionfuerrueckgabe (meine_variable)
print(meine_variable)
print(ergebnisausfunktion)
Deine Variable "rückgabewert" hingegen... Nun, in Python (und den meisten anderen Programmiersprachen) haben Variablen einen Sichtbarkeitsbereich (englisch: "scope"). Und die Variable "rückgabewert" hat nur einen lokalen Sichtbarkeitsbereich, das heißt: sie wird in Deiner Funktion erzeugt, und wenn die Funktion abgearbeitet ist, verschwinden der Sichtbarkeitsbereich und damit auch die darin angelegte Variable automatisch wieder. Deswegen haben Funktionen einen Rückgabewert, der mit "return" zurückgegeben wird. Üblicherweise ist man ja weniger an den inneren Abläufen einer Funktion interessiert, sondern daran, was die Funktion berechnet, also: zurückgibt.
Über "global" möchtest Du Dir bitte keine weiteren Gedanken machen. Das ist etwas für Fortgeschrittene, die genau wissen, was sie tun -- und es, aus guten Gründen, auch dann scheuen wie der Teufel das Weihwasser.