调用将 lambda 函数相加的自定义函数时内核重新启动
Kernel restarts when calling self defined function which adds together lambda functions
我试图定义一个将多个 lambda 函数相加的函数。
当我调用该函数时,内核崩溃并重新启动,没有进一步的错误消息。
def add_lambdas(function_list):
f = lambda x, y: None
for function in function_list:
f = lambda x, y: f(x, y) + function(x, y)
return f
f1 = lambda x, y: x + y
f2 = lambda x, y: x**2 - 2*y
f3 = lambda x, y: f1(x,y) + f2(x,y)
f4 = add_lambdas([f1,f2])
例如,当我调用 f3(2,3) 时一切正常,但是当我调用 f4(2,3) 时内核崩溃并重新启动。对于 f3,我手动添加 f1 和 f2,但对于 f4,我通过函数 add_lambdas().
传递它们
这是输出:
In[5]: f3(2,3)
Out[5]: 3
In[6]: f4(2,3)
Restarting kernel...
显然我定义的函数有问题,但我无法弄清楚它是什么。有什么想法吗?谢谢!
我认为问题在于您将 f
定义为递归函数,我认为这不是您想要的。您可以试试这个:
def add_lambdas(function_list):
return lambda x, y: sum(f(x, y) for f in function_list)
您遇到了堆栈溢出。问题是add_lambdas
中只有一个变量f
和一个变量function
。当你写:
f = lambda x, y: f(x, y) + function(x, y)
您只是为变量 f
分配了一个新值,但定义中的变量 f
也是该新值。这就是堆栈溢出。此外,变量 function
将保留列表中的最后一个值。它没有理由复制该值。
如果您改为:
f = lambda x, y, f=f, function=function: f(x, y) + function(x, y)
,
你告诉 Python 将 f
和 function
分配给新变量(具有相同的名称)并在 lambda 中使用这些新变量。对其他变量所做的更改无关紧要
您会在代码中发现一个不同的错误。第一行必须是
f = lambda x, y: 0
因为否则你要向 None
.
添加一个整数
请注意,如果您只是计划添加内容,@josemz 是更简单的解决方案。如果你想学习在其他 lambda 中使用 lambda,你需要确保变量被正确绑定。
我试图定义一个将多个 lambda 函数相加的函数。 当我调用该函数时,内核崩溃并重新启动,没有进一步的错误消息。
def add_lambdas(function_list):
f = lambda x, y: None
for function in function_list:
f = lambda x, y: f(x, y) + function(x, y)
return f
f1 = lambda x, y: x + y
f2 = lambda x, y: x**2 - 2*y
f3 = lambda x, y: f1(x,y) + f2(x,y)
f4 = add_lambdas([f1,f2])
例如,当我调用 f3(2,3) 时一切正常,但是当我调用 f4(2,3) 时内核崩溃并重新启动。对于 f3,我手动添加 f1 和 f2,但对于 f4,我通过函数 add_lambdas().
传递它们这是输出:
In[5]: f3(2,3)
Out[5]: 3
In[6]: f4(2,3)
Restarting kernel...
显然我定义的函数有问题,但我无法弄清楚它是什么。有什么想法吗?谢谢!
我认为问题在于您将 f
定义为递归函数,我认为这不是您想要的。您可以试试这个:
def add_lambdas(function_list):
return lambda x, y: sum(f(x, y) for f in function_list)
您遇到了堆栈溢出。问题是add_lambdas
中只有一个变量f
和一个变量function
。当你写:
f = lambda x, y: f(x, y) + function(x, y)
您只是为变量 f
分配了一个新值,但定义中的变量 f
也是该新值。这就是堆栈溢出。此外,变量 function
将保留列表中的最后一个值。它没有理由复制该值。
如果您改为:
f = lambda x, y, f=f, function=function: f(x, y) + function(x, y)
,
你告诉 Python 将 f
和 function
分配给新变量(具有相同的名称)并在 lambda 中使用这些新变量。对其他变量所做的更改无关紧要
您会在代码中发现一个不同的错误。第一行必须是
f = lambda x, y: 0
因为否则你要向 None
.
请注意,如果您只是计划添加内容,@josemz 是更简单的解决方案。如果你想学习在其他 lambda 中使用 lambda,你需要确保变量被正确绑定。