ich suche eine Möglichkeit, an die Anzahl der Rückgabewerte einer Funktion zu kommen.
Ein Beispiel:
Code: Alles auswählen
def DoSomething():
...
return Var1, Var2
Jemand eine Idee?
Gruß
Nergal
Code: Alles auswählen
def DoSomething():
...
return Var1, Var2
Code: Alles auswählen
>>> def a(): return 1, 2, 3
>>> import dis
>>> dis.dis(a)
1 0 LOAD_CONST 4 ((1, 2, 3))
3 RETURN_VALUE
Code: Alles auswählen
def spam(condition):
return (1, 2) if condition else (1,) + global_function()
Code: Alles auswählen
def spam():
try:
return (1,2)
finally:
return (3, 4)
Code: Alles auswählen
import random
def foo():
return tuple(42 for _ in xrange(random.randint(0, 10000000)))
# Wieviele variablen return't foo()?
bar = foo()
Mag daran liegen dass Funktionen nicht unterschiedliche viele Variablen zurückgeben können. Funktionen können allerdings unterschiedlich große Sequenzen zurückgeben.b.esser-wisser hat geschrieben:ps.: Dass eine Funktion überhaupt unterschiedlich viele verschiedene Variablen zurückgeben kann, klingt für mich schon verkehrt
Eine Sequenz ( im Sinne von Liste/Array/generator) ist aber (in PythonDasIch hat geschrieben:Mag daran liegen dass Funktionen nicht unterschiedliche viele Variablen zurückgeben können. Funktionen können allerdings unterschiedlich große Sequenzen zurückgeben.
Das wäre vielleicht gar nicht so schlecht, denn das riecht wie BlackJack es sagen würde nach einem "Code Smell".Nergal hat geschrieben:Um den Sinn des Ganzen ausführlich zu erklären, müßte ich an dieser Stelle zu weit ausholen.
Ach, machen das die neuen nicht mehr? Wie kann man denn in einer Funktion mehrere Objekte zurückgeben? Ich dachte immer, man kann nur ein Objekt pro Funktion zurückgeben.Nergal hat geschrieben:Diese Scripte möchte ich nun gerne vor der Ausführung analysieren, da einige schon älter sind und nur einen Parameter zurückgeben.
Technisch/syntaktisch ist das auch so, aber Iterables (tuple, listen, etc) können ja automatisch entpackt werden:derdon hat geschrieben:Wie kann man denn in einer Funktion mehrere Objekte zurückgeben?
Ich dachte immer, man kann nur ein Objekt pro Funktion zurückgeben.
Code: Alles auswählen
>>> def foo( bar, baz, *args, **kwargs):
return baz, bar
>>> foo(0,1)
(1, 0)
>>> test = foo(0,1)
>>> print type(test), repr(test)
<type 'tuple'> (1, 0)
>>> a, b = foo( *range(100))
>>># ^ man kann auch selbst auspacken
>>># der Rest landet hier im tuple `args'
>>> a
1
>>> b
0