Optimierung einer Fakultätsfunktion in Python
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
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