# 函数名 = lambda 参数 :返回值。 匿名函数只是函数,如果要通过可迭代对象给匿名函数传参,就需要使用 map 或者 filter calc = lambda n:n**n calc(1)
clac2 = lambda x,y:x+y calc2(1,2) 参数可以有多个,用逗号隔开 匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值 返回值和正常的函数一样可以是任意数据类型 求最大value的key dict = {'k1':10,'k2':100,'k3':30} print(max(dict)) print(max(dict,key=lambda k:dict[k])) 内置方法中带key的有 max min filter map sorted,都可以和lambda合作
面试题:
#做面试题的时候,要多想想考什么,比如生成器,迭代器,装饰器必考,多想想是不是考这些 #!!!!!!!!!!!!!!!考匿名函数,其实就是为了考内置函数 max min filter map sorted #第一题读代码 d = lambda q:q*2 t = lambda t:t*3 x = 2 x = d(x) x = t(x) x = d(x) print(x) #第二题,现有两元组(('a'),('b')),(('c'),('d')), #清用python中匿名函数生成列表[{'a':'c'},{'b':'d'}] ret = zip((('a'),('b')),(('c'),('d'))) # def func(tup): # return {tup[0]:tup[1]} res = map(lambda tup:{tup[0]:tup[1]},ret) print(list(res)) #第三题,以下代码的输出是什么? def multipliers(): ret = [lambda x:i*x for i in range(4)] return ret print([m(2) for m in multipliers()]) #multipliers() 运行完 返回值是 [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 lambda x:i*x] #但是运行完了四次,此时 i == 3 所以当 m(2)给匿名函数传值的时候,输出结果就为[6,6,6,6] #若想达到预期结果,只要把 返回值改为 (lambda x:i*x for i in range(4)),让它变成生成器表达式 #此时调用multipliers函数并不会运行,只有当 m(2)执行一次for循环才会运行一次