匿名函数lambda及面试题三道

# 函数名 = 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循环才会运行一次
原文地址:https://www.cnblogs.com/gkx0731/p/9558295.html