Optymalizacja funkcji silni w Pythonie

Sep 26 2020

Więc osiągnąłem tę funkcję z rozpakowaniem parametru (* x) , ale chcę, aby wyświetlał wynik, a nie zwracał go, i chcę dobrej optymalizacji, co oznacza, że ​​nadal potrzebuję, aby była to funkcja dwóch wierszy

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

Próbowałem to osiągnąć, implementując lambdę, ale nie wiedziałem, jak przekazać parametr * x

Odpowiedzi

4 JackAshton Sep 27 2020 at 01:59

Twoja silnia lambda jest poprawna. Zakładam, że chciałbyś obliczyć silnię dla listy, powiedz [1, 2, 3] i wyprowadź wyniki, w ten sposób możesz to osiągnąć.

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

Który wyświetli: 1, 2, 6

Inną opcją, jeśli masz Pythona 3.8, jest użycie rozumienia listowego z nowym operatorem morsa (: =), jest to nieco trudniejsze, ale obliczy i wyprowadzi wszystkie silnie aż do n włącznie, jednocześnie dopasowując się do wymaganych dwóch wierszy.

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

Który wyświetli: 1, 2, 6, 24, 120