匿名函数-lambda
Posted felix-doubleking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名函数-lambda相关的知识,希望对你有一定的参考价值。
匿名函数-lambda
匿名函数 lambda [arg1 [,arg2,.....argn]]:expression lambda只是一个表达式,函数体比def简单很多。 lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。 lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。 exp: dic = {‘k1‘: 10, ‘k2‘: 50, ‘k3‘: 100, ‘k4‘: 80} print(max(dic,key=lambda k:dic[k])) 内置函数中参数带key的有以下: max min filter map sorted 以上都可以通过和lambda合用完成一些功能 exp2: 现有两元组tup1,tup2,请使用匿名函数生产列表lst tup1 = ((‘a‘),(‘b‘)) tup2 = ((‘c‘),(‘d‘)) lst = [{‘a‘:‘c‘},{‘b‘:‘d‘}] 写法1:自己写的 lst = lambda x,y: [{(x[i][0]):y[i][0]} for i in range(len(x))] print(lst(tup1,tup2)) [{‘a‘: ‘c‘}, {‘b‘: ‘d‘}] 写法2: tup1 = ((‘a‘),(‘b‘)) tup2 = ((‘c‘),(‘d‘)) # lst = [{‘a‘:‘c‘},{‘b‘:‘d‘}] # ret = zip(tup1,tup2) # def func(t): # return {t[0]:t[1]} # func = lambda t:{t[0]:t[1]} # res = map(lambda t:{t[0]:t[1]},zip(tup1,tup2)) print(list(map(lambda t:{t[0]:t[1]},zip(tup1,tup2)))) exp3.以下代码的输出是什么?请给出答案并解释。 def multipliers(): return [lambda x:i*x for i in range(4)] print([m(2) for m in multipliers()]) 请修改multipliers的定义来产生期望的结果。 解析: def multipliers(): return [lambda x : i *x for i in range(4)] #返回列表推导式 [lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x] print([m(2) for m in multipliers()]) # [m(2) for m in [lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x]] # multipliersw()为[lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x] # [m(2) for m in [lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x]] # m 为 lambda x : i *m, 4次 # m(2) [lambda x : i *2,lambda x : i *2,lambda x : i *2,lambda x : i *2]] #而此时multipliers()中的for循环已执行完,i最后的值为3 # 所以 [lambda x : 3 *2,lambda x : 3 *2,lambda x : 3 *2,lambda x : 3 *2]] #[6, 6, 6, 6] exp4.以下代码的输出是什么?请给出答案并解释。 def multipliers(): return (lambda x : i *x for i in range(4)) #返回一个生成器 g =(lambda x : i *x for i in range(4) print([m(2) for m in multipliers()]) # [m(2) for m in multipliers()] # [m(2) for m in (lambda x : i *x for i in range(4)] # [m(2) for m in (lambda x : 0 *x,lambda x : 1 *x,lambda x : 2 *x,lambda x : 3 *x] # [2 * 0,,2 * 1, 2 * 2,2 * 3] #[0,2,4,6]
以上是关于匿名函数-lambda的主要内容,如果未能解决你的问题,请参考以下文章