如何用一个函数制作多个lambda函数?

时间:2018-12-30 06:21:54

标签: python lambda

我想使用不同的参数制作多个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
-----

我想我每次都绑定相同的日期和索引号。可能是什么问题呢?如果能得到一些帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

在lambda表达式中,您有一个i,它是从idx到循环的,另外还有一个d,它是从dates到循环的。 lambda表达式中的这两个值不是在函数定义时求值,而是在调用函数时求值,因此,每次执行print(d + '_' + i)时,该函数只会查询d的当前值和i,这只是for d in datesfor i in idx中最后一件事的值,这就是为什么每次都获得相同值的原因。

您可以通过以下方法解决此问题:

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

这会给您预期的行为