如何使用Python lambda函数非递归实现阶乘且不依赖内置函数
非递归Python lambda阶乘实现
报错原因
Python 中的 lambda 函数仅支持单个表达式作为返回值,不能直接包含 while 循环、变量赋值、return 这类多语句逻辑,你直接把普通函数的多语句逻辑写入 lambda 自然会触发语法错误。
可行实现代码
完全沿用你原有非递归阶乘逻辑的 lambda 实现如下,无递归,逻辑和你编写的 def 版本完全一致:
factorial_number = lambda num: exec("fact=1\nwhile num>=1:\n fact = num * fact\n num -= 1", globals(), locals()) or locals()["fact"]
测试示例
# 计算5的阶乘,输出结果为120 print(factorial_number(5))
实现逻辑说明
exec函数用于执行传入的字符串形式代码块,这里直接复用了你编写的 while 循环阶乘逻辑exec执行完成后默认返回 None,因此用or运算符取后面的locals()["fact"]作为整个 lambda 的返回值locals()可以获取到 exec 执行上下文内的局部变量fact,也就是最终计算出的阶乘结果
内容的提问来源于stack exchange,提问作者vijay bhargav karnati
相关产品推荐
相关产品推荐

