优化 python 中的阶乘函数

Optimizing a factorial function in python

所以我用解包参数(*x)实现了这个功能,但是我想让它显示结果不是return 它,我想要一个很好的 优化 意味着我仍然需要它是一个 两行 函数

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 来实现这一点,但我不知道如何传递 *x 参数

您的阶乘 lambda 是正确的。我认为您想计算列表 [1, 2, 3] 的阶乘并输出结果,这就是实现此目的的方法。

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

将输出:1、2、6

另一个选项,如果你有 python 3.8 是使用新海象运算符 (:=) 的列表理解,这有点棘手,但将计算并输出所有包含 n 的阶乘,同时仍适合您需要的两行。

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

将输出:1、2、6、24、120

优化的阶乘数由我在下面创建的函数显示。

def fact(n):
    list_fact = []
    if n > 1 and n not in list_fact:
        list_fact.extend(list(range(1, n + 1)))
    return reduce(lambda x, y: x * y, list_fact)
print(fact(9000))  # it will display output within microseconds.

注: 迭代时我将所有以前的值保存到一个列表中,这样就不会每次都计算每个值。