2016-06-23 10 views
-3
def compose(f,g): 

    return lambda f: f + 1 
    return lambda g: g 

wie ichReihenfolge sollte wie angegeben sein! Fehler

Dies sind die Testfälle, die Reihenfolge der return-Anweisungen geben kann;

add1 = lambda a: a+1 
this = lambda a: a 

test.expect(compose(add1,this)(0) == 1) 
+1

Es gibt keinen Fehler. Es gibt das erste Lambda zurück, das seine Eingabe um 1 erhöht. Was genau wollen Sie erreichen? – prashkr

+0

die Anforderung ist Rückkehr 2 Funktionen, es fehlschlägt Tests wo Reihenfolge angegeben ist – Conor

+2

Wie wäre es 'zurück (Lambda f: f + 1, Lambda g: g)' und Zugriff mit ihren entsprechenden Indizes? – prashkr

Antwort

2
def compose(f1, g1): 
    # do something 
    return lambda f:f+1, lambda g:g 

wird ein Tupel von zwei Funktionen zurück.

Sie können die einzelnen Funktionen wie folgt erhalten:

func1, func2 = compose(a,b) 
+0

gleicher Fehler in der Version ohne Klammern – Conor

+0

Welcher Fehler, genau? Die Klammern spielen hier keine Rolle. Der Punkt ist, dass Sie mehrere Variablen mit einer einzigen Rückgabeanweisung zurückgeben können. – SvbZ3r0

0
def compose(f,g): 

    return lambda f: f + 1,lambda g: g 

print compose(f,g)[0] 
print compose(f,g)[1] 
+0

zu erklären, warum dies funktioniert, wäre für zukünftige Leser hilfreich. – gobrewers14

1

Sie können nicht zwei return-Anweisungen in einer Funktion. Sobald die erste aufgerufen wird, wird die zweite nicht erreicht, da die Funktion bereits zurückgegeben wurde. Sie könnten jedoch eine tuple verwenden, um die Ausgabe zu organisieren, die so aussehen würde.

def compose(f,g): 

    return (lambda f: f + 1, lambda g: g) 

Seien Sie aber vorsichtig, weil diese die tatsächlichen lambdas zurückkehren wird, wie das folgende Beispiel zeigt:

In [7]: def func(f, g):                                     
    ...:  return (lambda f: f + 1, lambda g: g)                              
    ...:                                         

In [8]: func(0, 0)                                     
Out[8]: (<function __main__.<lambda>>, <function __main__.<lambda>>) 

Beachten Sie die Arten von Linie zeigt [8]. Das bedeutet, dass die Variablen, zu denen die Funktion zurückkehrt, die tatsächlichen Funktionen sind, keine Zahlen. Um eine Zahl zurückzugeben, verwenden Sie keine Lambdas, sondern berechnen Sie die Zahlen normal.

Es ist auch erwähnenswert, dass die Parameter keinen Einfluss auf diese Funktion haben.

+0

versuchte diese Lösung: "Traceback: in TypeError: 'Tuple' Objekt ist nicht aufrufbar" – Conor

+0

ist ein Codewar Kata so habe ich keinen Zugriff auf die Lösung oder andere Fehlerdetails – Conor

+0

Das ist, weil Sie angeben müssen, welches Element zuerst zugreifen . Das Tupel ist keine Funktion, sondern enthält die Funktionen. Verwenden Sie wie Arrays den Operator [], um die zu verwendende Funktion auszuwählen. Dies wird unter dem angegebenen Link erläutert. – rtmh

Verwandte Themen