Seite 2 von 2
Verfasst: Freitag 22. Januar 2010, 18:18
von heiliga horsd
Danke dir!
Also wenn ich bspw.
habe, kann ich mit
darauf zugreifen?
Muss ich dann irgendwas beachten, wenn ich zwei Werte zurück gebe und bloß einen verwende oder ist das egal?
Verfasst: Freitag 22. Januar 2010, 18:30
von Hyperion
Du kannst mehrere Werte zurückgeben, ja. Du erhältst dann ein Tupel zurück.
Du solltest Dir dringend mal das Tutorial angucken. Das sind absolute Grundlagen und ohne diese kann Deine Projektstruktur nicht gut sein! (Du verwendest doch Funktionen - da sollte man so etwas banales doch wissen)
Verfasst: Freitag 22. Januar 2010, 18:39
von heiliga horsd
Ich weiß schon, dass ich mehrere Werte zurück geben kann (und auch wie). Ich wollte lediglich wissen, was passiert, wenn ich mehr Werte zurück gebe, als ich dann eigentlich brauche.
Verfasst: Freitag 22. Januar 2010, 19:11
von Hyperion
heiliga horsd hat geschrieben:Ich weiß schon, dass ich mehrere Werte zurück geben kann (und auch wie). Ich wollte lediglich wissen, was passiert, wenn ich mehr Werte zurück gebe, als ich dann eigentlich brauche.
Dann hättest Du das auch schreiben sollen
"Versuch macht kluch"
Code: Alles auswählen
In [1]: def foo():
...: return 1, True, None, "Hallo"
...:
In [2]: foo()
Out[2]: (1, True, None, 'Hallo')
In [3]: d = foo()
In [4]: d[0]
Out[4]: 1
In [5]: d[3]
Out[5]: 'Hallo'
In [6]: a, b, c = foo()
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
C:\Dokumente und Einstellungen\nelson\Eigene Dateien\<ipython console> in <modul
e>()
ValueError: too many values to unpack
Wie Du siehst ist es solange egal, wie Du das Tupel nicht wieder zerlegen und an einzelne Namen binden willst. Dann muss die Anzahl natürlich exakt stimmen.
Verfasst: Freitag 22. Januar 2010, 20:28
von Michael Schneider
Hallo,
um nochmal eine manchmal verwirrende Eigenheit zu erläutern, auch wenn es nicht 1 zu 1 auf Dein Beispiel zutrifft:
Code: Alles auswählen
>>> i = 5
>>> def out():
... print i
... i = 3
...
>>> out()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in out
UnboundLocalError: local variable 'i' referenced before assignment
Im Beispiel ist der Name i global an das Integerobjekt 5 gebunden.
Theoretisch kannst Du das Objekt innerhalb der Funktion referenzieren. ABER: wenn Du im weiteren Verlauf der Funktion den Namen neu bindest, wie in diesem Fall an das Integerobjekt der 3, dann gilt der Name (quasi rückwirkend) als lokal. Daher ist der Zugriff wie oben dargestellt nicht möglich. Lösung wäre eine Definition als 'global i' (unschön) oder die Übergabe als Funktionsparameter von außen (sauber).
Ich hoffe, das war verständlich.
Grüße,
Michel
Verfasst: Freitag 22. Januar 2010, 20:33
von heiliga horsd
Ja, war es. Ich werde mich wahrscheinlich morgen nochmal dran setzen und wieder ein wenig herum tüfteln. Falls wieder Fragen aufkommen melde ich mich.
Bis dahin Danke an alle!