gpt4 book ai didi

python - 使用匿名lambda实现阶乘函数的python代码的解释是什么

转载 作者:太空宇宙 更新时间:2023-11-03 15:04:45 25 4
gpt4 key购买 nike

这个功能真是让我摸不着头脑。谁能解释一下关键思想?如果有一些示例来演示该功能的工作原理会更好。

from operator import sub, mul

def make_anonymous_factorial():
"""Return the value of an expression that computes factorial.

>>> make_anonymous_factorial()(5)
120
"""
return (lambda f: lambda k: f(f, k))(lambda f, k: k if k == 1 else mul(k, f(f, sub(k, 1))))

最佳答案

所以以更长的形式重写:

def make_anonymous_factorial():
def func1(f):
def func2(k):
return f(f, k))
return func2
def func3(f, k):
if k == 1:
return k
else:
return mul(k, f(f, sub(k, 1)))
return func1(func3)

再次简化:

def make_anonymous_factorial():
def func1(factorial_function):
def func2(k):
factorial_function(factorial_function, k))
return func2
def factorial(recursive_func, k):
if k == 1:
return k
else:
return k * recursive_func(recursive_func, k-1)
return func1(factorial)

通常你可以这样写阶乘:

def factorial(k):
if k == 1:
return k
else:
return k * factorial(k-1)

...但这依赖于能够通过名称引用自身的阶乘。作为一个匿名函数,它不能那样做,所以它需要作为参数传递“自身”,所以它知道要调用谁。

func1func2 只是设置系统调用自身:

def func1(factorial_function):
def func2(k):
factorial(factorial_function, k))
func1(factorial)

这将返回一个函数(func2 作为闭包,可以访问包含 factorial_function 的封闭范围)。 func2 在被调用时将调用 factorial(factorial, k) 从而计算阶乘函数。

关于python - 使用匿名lambda实现阶乘函数的python代码的解释是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34198346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com