函数列表的奇怪行为

2024-05-29 00:11:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用一系列参数来定义一系列函数,实际上是由有限数量的单极子和偶极子组成一个势。你知道吗

然而,由于某种原因,python列表中的函数的行为并不像我所期望的那样。你知道吗

以下示例:

def function(coefficients):
  phi = []
  i = 0
  for y in coefficients:
    f = lambda x: y*(x**i)
    i += 1
    phi.append(f)
    print f(2)
  return phi

> phi = function([1,2,3])
2
8
24

> k0 = phi[0]
> k1 = phi[1]
> k2 = phi[2]

> print k0(2), k1(2), k2(2)
24 24 24

始终检索列表中的最后一个函数,与从列表中选择的函数无关。你知道吗

有什么想法吗?你知道吗

提前谢谢。你知道吗


Tags: 函数示例列表参数数量定义functionk2
1条回答
网友
1楼 · 发布于 2024-05-29 00:11:09

由于闭包属性,lambda函数保存对变量y的引用。因此,所有函数都对同一对象有引用,它们将在调用期间获得最后一个值y。为了解决这个问题

f = lambda x,y=y,i=i: y*(x**i)

现在,我们已经创建了另一个参数y,它具有默认值y。它使函数现在依赖于本地引用。因此,即使循环中y的值发生变化,lambda函数也不再引用该y。你知道吗

注:同样的解释也适用于变量i。你知道吗

为了清楚起见,我建议使用不同的变量名

f = lambda x, z=y, j=i: z * (x ** j)

注意:您最初的输出是2 8 24。那是因为,当你调用这个函数时,i被递增了,我不认为这是你真正想要的。实际输出应该是1 4 12。你知道吗

相关问题 更多 >

    热门问题