zoukankan      html  css  js  c++  java
  • 匿名函数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循环才会运行一次
  • 相关阅读:
    fopen C++
    Jungle Roads(最小生成树+并查集)
    Magic Number(dp)
    error: macro names must be identifiers
    <errors>'MessageBoxA' : function does not take 1 parameter
    归并排序模板
    MFC程序出现“Debug Assertion Failed! File:afx.inl Line:177”错误
    构造函数初始化列表
    (Codeforces Round #136 (Div. 2))A. Little Elephant and Function(递归分析,简单)
    Argus(ZOJ Problem Set 2212)(优先队列)
  • 原文地址:https://www.cnblogs.com/gkx0731/p/9558295.html
Copyright © 2011-2022 走看看