2016-12-29 4 views
1

Ich habe versucht, in einer Lambda-Funktion Looping und mein Code:Kann Schleifen in einem Lambda durchgeführt werden?

zxm=lambda k:[k+x for x in range(k)] 
print(zxm(5)) 

und die Ausgabe, die ich habe ist, wenn ich den Eingang gab:

[5,6,7,8,9] 

Meine erwartete Ausgabe jedoch die Summe ist alle 5 Nummern und ich will:

35 

Wie können wir Lambda loop? Gibt es auch eine Rekursionswahrscheinlichkeit in einem?

Antwort

7

Das ist keine Schleife an sich, es ist ein Listenverständnis. Sie können beispielsweise sum verwenden, um die Summe zu erhalten.

In [7]: zxm = lambda k: sum(k+x for x in range(k)) 

In [8]: zxm(5) 
Out[8]: 35 

Beachten Sie, dass Aussagen wie for innerhalb lambda verboten sind; Nur Ausdrücke sind zulässig, obwohl Sie Listen-Comprehensions verwenden können, können Sie keine traditionelle for-Schleife schreiben.

+1

Beachten Sie, dass diese Lösung ein Generatorverständnis ('()') anstelle eines Listenverständnisses ('[]') verwendet, das effizienter sein kann (besonders wenn die Liste groß ist). Weitere Informationen: http://stackoverflow.com/questions/47789/generator-expressions-vs-list-comprehension –

1

Zuerst gibt es sum Methode in Python. Sie können einfach sum(zxm(5)) tun. Rekursive Lambdas existieren (siehe: Y Combinator), und dies ist in Python möglich (siehe Can a lambda function call itself recursively in Python?), jedoch ist die Praktikabilität davon nicht besonders stark. Lambdas können (wie in Listen) innerhalb von hier geloopt werden. Das Problem ist nicht, dass zxm ein Lambda ist, sondern wie es definiert ist. Sie können die Summe in zxm erhalten, indem Sie sie als zxm=lambda k: sum([k+x for x in range(k)]) definieren.

Verwandte Themen