Python'da bir faktöriyel işlevi optimize etme

Sep 26 2020

Bu işlevi paket açma parametresi (* x) ile elde ettim , ancak sonucun onu döndürmemesini sağlamak istiyorum ve iyi bir optimizasyon istiyorum, yani hala iki satırlı bir işlev olmasına ihtiyacım var

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

lambda'yı uygulayarak bunu başarmayı denedim ama * x parametresini nasıl geçireceğimi bilmiyordum

Yanıtlar

4 JackAshton Sep 27 2020 at 01:59

Faktöriyel lambdanız doğru. [1, 2, 3] diyen bir liste için faktöriyelleri hesaplamak ve sonuçları çıkarmak istediğinizi varsayıyorum, bunu bu şekilde başarabilirsiniz.

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

Hangi çıktı: 1, 2, 6

Diğer bir seçenek, eğer python 3.8'e sahipseniz , yeni mors operatörüyle (: =) bir liste kavrayışı kullanmaktır, bu biraz daha zordur, ancak n'ye kadar olan tüm faktöriyelleri hesaplayıp çıktı alırken yine de gerekli iki satıra uyacaktır.

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

Hangi çıktı: 1, 2, 6, 24, 120