如何用一个函数构造多个lambda函数?

2024-09-26 22:11:42 发布

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

我想用不同的参数创建多个lambda函数,并将它们绑定到一个字典。你知道吗

dic_funcs = {}

dates = ['2018', '2019', '2020']

idx = ['0', '1', '2']

def printt(text):
    print(text)


for d in dates:
    for i in idx:

        #print(d, i)

        dic_funcs[d + '_' + i] = lambda:printt(d + '_' + i)


for key, item in dic_funcs.items():
    print(key)
    item()      
    print('-----')  

我认为每个键和相应值(lambda函数)的结果都是相同的,但它们不是。你知道吗

2018_0
2020_2
-----
2018_1
2020_2
-----
2018_2
2020_2
-----
2019_0
2020_2
-----
2019_1
2020_2
-----
2019_2
2020_2
-----
2020_0
2020_2
-----
2020_1
2020_2
-----
2020_2
2020_2
-----

我想我每次都绑定了相同的日期和索引号。有什么问题吗?如果我能得到一些帮助我会很感激的。你知道吗


Tags: lambdakey函数textinfor参数字典
1条回答
网友
1楼 · 发布于 2024-09-26 22:11:42

在lambda表达式中有一个i,它是从循环到idx,还有一个d,它是从循环到dates。lambda表达式中的这两个值不是在函数定义时计算的,而是在调用函数时计算的,因此每次执行print(d + '_' + i)时,函数只会查找di的当前值,这只是for d in datesfor i in idx中最后一个值,这就是为什么你每次都得到相同的值。你知道吗

你可以用这样的方法来解决这个问题:

dic_funcs[d + '_' + i] = lambda a=i, b=d:printt(b + '_' + a)

给了你想要的行为

相关问题 更多 >

    热门问题