将lambda函数赋给数组

2024-09-27 09:33:27 发布

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

下面的代码有什么问题?在

arrs={}
def func(i):
    print i
for i in range(1,5):
    arrs[i]=lambda:func(i)
for key in arrs.keys():
    arrs[key]()

我要打印1234。而是打印4 4 4 4 4


Tags: lambdakey代码infordefrangekeys
1条回答
网友
1楼 · 发布于 2024-09-27 09:33:27

这是使用lambda时遇到的常见问题。运行arrs[i]=lambda: func(i)时,lambda不会生成保留当前i值的函数。这实际上与普通函数定义完全相同:

def func(i):
    return i

i = 5
def anon():
    return func(i)

i = 0
anon()

i被视为任何标准变量,其值最初是在函数的本地命名空间中搜索的,因为它不在那里,所以它将在全局级别上搜索该名称。此时它会找到当前值i,而不是函数最初定义时的i的值。在

解决这个问题的一种方法(也是一种常见的习惯用法)是用一个输入创建lambda函数,并将当前值i指定为默认参数。在

^{pr2}$

这将在函数定义时将i的值绑定为默认参数,因此不受全局i值的影响。在

相关问题 更多 >

    热门问题