Optimierung einer Fakultätsfunktion in Python

Sep 26 2020

Also habe ich diese Funktion mit dem Entpackungsparameter (* x) erreicht , aber ich möchte, dass das Ergebnis angezeigt wird, nicht zurückgegeben wird, und ich möchte eine gute Optimierung, was bedeutet, dass es immer noch eine zweizeilige Funktion sein muss

1.def fac(*x):
    2.return (fac(list(x)[0], list(x)[1] - 1)*list(x)[1]) if list(x)[1] > 0 else 1//here i need the one line to print the factorial

Ich habe versucht, dies durch die Implementierung von Lambda zu erreichen, aber ich wusste nicht, wie ich den Parameter * x übergeben sollte

Antworten

4 JackAshton Sep 27 2020 at 01:59

Ihr faktorielles Lambda ist korrekt. Ich gehe davon aus, dass Sie die Fakultäten für eine Liste berechnen möchten, z. B. [1, 2, 3], und die Ergebnisse ausgeben möchten. So können Sie dies erreichen.

fact = lambda x: x*fact(x-1) if x > 0 else 1
print(*[fact(i) for i in [1, 2, 3]])

Welches wird ausgegeben: 1, 2, 6

Eine andere Option, wenn Sie Python 3.8 haben, ist die Verwendung eines Listenverständnisses mit dem neuen Walross-Operator (: =). Dies ist etwas schwieriger, berechnet jedoch alle Fakultäten bis einschließlich n einschließlich und gibt sie aus, während sie weiterhin in die erforderlichen zwei Zeilen passen.

fac, n = 1, 5
print(*[fac for i in range(1, n+1) if (fac := fac*i)])

Welches wird ausgegeben: 1, 2, 6, 24, 120