Ich habe eine Funktion, und wenn es aufgerufen wird, möchte ich wissen, was der Rückgabewert zugewiesen wird - insbesondere wenn es als ein entpackt wird Tupel. Also:Finden Sie heraus, in wie viele Werte ein Rückgabewert entpackt wird
a = func() # n = 1
gegen
a, b, c = func() # n = 3
Ich möchte den Wert von n
in func
verwenden. Es muss etwas Magie mit inspect
oder _getframe
sein, die mich das tun lassen. Irgendwelche Ideen?
Haftungsausschluss (weil dies scheint notwendig heutzutage zu sein): Ich weiß, das ist funky und schlechte Praxis und soll nicht in Produktionscode verwendet werden. Es sieht tatsächlich so aus, als würde ich etwas in Perl erwarten. Ich bin nicht auf der Suche nach einem anderen Weg, mein vermeintlich "aktuelles" Problem zu lösen, aber ich bin neugierig, wie ich erreichen kann, wonach ich gefragt habe. Eine kühle Nutzung dieser Trick wäre:
ONE, TWO, THREE = count()
ONE, TWO, THREE, FOUR = count()
mit
def count():
n = get_return_count()
if not n:
return
return range(n)
Sie können die Länge des zurückgegebenen Werts überprüfen und Zuordnungen basierend auf dieser Länge durchführen. –
Was ist der Zweck? Sie können von der Funktion selbst wissen, wie viele Elemente zurückgegeben werden, oder Sie können einfach 'len (foo())' im Aufrufer verwenden. Ich habe das Gefühl, dass dies eine Lösung ist, die nach einem Problem sucht. –
@AshwiniChaudhary: Nein, ich bin immer noch in der Funktion 'func' und habe noch nichts zurückgegeben, also kann ich' len' nicht aufrufen. Wenn der Aufrufer 'a, b = func()' tut, gebe ich 2 Elemente zurück. Wenn der Aufrufer 'a, b, c = func()' tut, gebe ich 3 zurück. Ich möchte in func wissen, was der Aufrufer mit dem Rückgabewert machen wird. – jdm