在python中递归定义函数
我有一个关于lambda函数的简单问题。我想做一个循环,在这个循环中,每次迭代都基于上一次迭代的lambda函数定义一个新的lambda函数在python中递归定义函数,python,python-3.x,loops,lambda,Python,Python 3.x,Loops,Lambda,我有一个关于lambda函数的简单问题。我想做一个循环,在这个循环中,每次迭代都基于上一次迭代的lambda函数定义一个新的lambda函数 f = lambda x: x**2 j=0 J=2 while j<J: f2 = lambda x: 0.5*f(x) f = f2 j+=1 我认为lambda函数可以像这样灵活地使用。我想有一种已知的pythonic方法可以正确地做到这一点?在调用lambda时,会查找lambda中的名称f,此时它引用lambda本
f = lambda x: x**2
j=0
J=2
while j<J:
f2 = lambda x: 0.5*f(x)
f = f2
j+=1
我认为lambda函数可以像这样灵活地使用。我想有一种已知的pythonic方法可以正确地做到这一点?在调用lambda时,会查找lambda中的名称
f
,此时它引用lambda本身,因此是无限递归
在特定时刻捕获值的常用习惯用法是将其作为lambda的默认参数,该参数在定义时进行计算:
f2 = lambda x, f=f: 0.5*f(x)
创建
lambda
函数时,它会维护对本地环境的引用,以便在调用lambda
时可以在其中查找变量。您需要将第一个lambda
函数作为参数传递给第二个:
f = lambda x: x**2
j=0
J=2
while j<J:
f2 = lambda x, f=f: 0.5*f(x)
f = f2
j+=1
f=lambda x:x**2
j=0
J=2
因为答案完全相同,所以我接受了第一个答案。谢谢,还有没有办法使用def
而不是lambda
?有没有办法使用def
而不是lambda
?当然,默认参数的相同技巧同样适用于常规函数。请记住,lambdas并没有向Python添加任何实际的新功能,它们只是定义真正简单函数的快捷方式。哇!这太疯狂了
f = lambda x: x**2
j=0
J=2
while j<J:
f2 = lambda x, f=f: 0.5*f(x)
f = f2
j+=1