标签:multi 简单 ++ 命名 return for循环 tip 生成器 元组
匿名函数-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]
标签:multi 简单 ++ 命名 return for循环 tip 生成器 元组
原文地址:https://www.cnblogs.com/Felix-DoubleKing/p/9809866.html