sususususu 发表于 2023-11-4 11:59:44

lambda问题

r=[]
for x in range(10):
    r.append(lambda n=x:n**2)
r() //为什么不能直接用r取值呢

isdkz 发表于 2023-11-4 11:59:51

在这段代码中,r是一个包含了10个lambda函数的列表。每个lambda函数都有一个参数n,并且返回n的平方。

当我们执行 r() 时,我们期望得到的是0的平方,也就是0。但是实际上,我们得到的结果是81,而不是我们期望的0。

这是因为在循环中,每个lambda函数都引用了变量x。当循环结束后,x的值变为9。因此,每个lambda函数都引用了x的最终值9。

当我们调用 r() 时,lambda函数会使用x的最终值9,而不是我们期望的0。因此,结果是81。

为了解决这个问题,我们可以在lambda函数中使用默认参数来捕获循环变量的当前值。修改代码如下:

r = []
for x in range(10):
    r.append(lambda n=x: n**2)
print(r())# 输出 0


通过将x的当前值作为默认参数传递给lambda函数,我们可以确保每个lambda函数捕获的是循环变量的当前值,而不是最终值。这样,我们就可以得到正确的结果。

陶远航 发表于 2023-11-4 12:00:20

在Python中,lambda关键字用于创建匿名函数,也就是没有名字的函数。在你的代码中,lambda n=x: n**2创建了一个匿名函数,它接受一个参数n并返回n的平方。

r返回的是这个函数本身,而不是函数的结果。在Python中,函数是一种对象,可以像其他对象一样被赋值给变量、作为参数传递给其他函数,或者作为列表、字典等数据结构的元素。因此,r实际上是一个函数对象,而不是一个具体的数值。

如果你想得到函数的结果,你需要调用这个函数。在Python中,调用函数的语法是在函数名后面加上括号(),并在括号中提供参数(如果函数需要参数的话)。因此,r()实际上是在调用r这个函数,并且因为这个函数不需要参数,所以括号中是空的。

所以,r()返回的是r这个函数调用的结果,也就是0的平方,即0。如果你直接使用r,你得到的将是一个函数对象,而不是一个数值。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-11-4 12:00:38

在你的代码中,你使用了一个循环来创建一个包含10个lambda函数的列表r。每个lambda函数都返回其创建时x的平方,而不是后续可能修改的x的值。

当你尝试使用r()来调用第一个lambda函数时,它确实返回了0,也就是它创建时的x的平方。但是,如果你尝试使用r来直接获取第一个lambda函数,它会返回一个函数对象,并不会返回0。这是因为r引用的是lambda函数本身,而不是调用该函数所得到的结果。

如果你想要获取第一个lambda函数的返回值,你需要通过调用r()来执行该函数,并将其结果赋值给一个变量或打印输出。例如,以下代码将调用r()并将其结果赋值给变量result:


r = []
for x in range(10):
    r.append(lambda n=x: n**2)

result = r()
print(result)


输出结果为:


0


希望这个解释能够帮助你理解问题的原因。如果还有任何疑问,请随时提出。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: lambda问题