2016-10-06 8 views
2

Ich habe eine Funktion, die etwas geht:retruning mehrere Objekte und sie als Argumente mit

def do_something(lis): 
    do something 
    return lis[0], lis[1] 

und eine andere Funktion, die diese beiden Rück Objekte als Argumente nehmen muss:

def other_function(arg1, arg2): 
    pass 

I versucht haben:

other_function(do_something(lis)) 

aber diesen Fehler entstanden sind:

+1

zeigen 'andere_funktion' Funktionsdeklaration – RomanPerekhrest

Antwort

3

Sie müssen diese Argumente beim Aufruf other_function entpacken.

other_function(*do_something(lis)) 

auf der Fehlermeldung Auf der Grundlage, es sieht aus wie Ihre andere Funktion definiert ist (und soll so definiert werden)

def other_function(arg1, arg2): 
    pass 

Also, wenn Sie von do_something zurückkehren, sind Sie ein Tupel tatsächlich Rückkehr enthält (lis[0], lis[1]). Also, als Sie ursprünglich other_function anriefen, übergaben Sie ein einzelnes Tupel, als Ihr other_function immer noch ein zweites Argument erwartete.

Sie können dies sehen, wenn Sie es ein wenig weiter brechen. Unten finden Sie eine Aufschlüsselung der ist, wie die Erträge aus, wenn anders gehandhabt, eine Reproduktion Ihrer Fehler und eine Demo der Lösung:

in Zurückkehren zu einer einzigen Variable wird ein Tupel des Ergebnisses zurück:

>>> def foo(): 
...  lis = range(10) 
...  return lis[1], lis[2] 
... 
>>> result = foo() 
>>> result 
(1, 2) 

Rückkehr in zwei Variablen, entpackt in zu jeder var:

>>> res1, res2 = foo() 
>>> res1 
1 
>>> res2 
2 

der Versuch, mit result zu nennen other_function, die jetzt nur noch ein Tupel von Ihr Ergebnis hält:

>>> def other_function(arg1, arg2): 
...  print(arg1, arg2) 
... 
>>> other_function(result) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: other_function() missing 1 required positional argument: 'arg2' 

Aufruf other_function mit res1, res2, die jeden Wert der Rückkehr aus foo hält:

>>> other_function(res1, res2) 
1 2 

Mit result (Ihr Tupel Ergebnis) und in der Funktionsaufruf other_function Auspacken:

>>> other_function(*result) 
1 2 
1

Sie können es so tun:

other_function(*do_something(list)) 

Das Zeichen * erweitert die tuple, die von do_something zurückgegeben wird.

Ihre do_something Funktion kehrt tatsächlich ein tuple, die mehrere Werte enthalten, aber ist nur ein Wert selbst.

Weitere Details finden Sie unter the doc.

Verwandte Themen