zoukankan      html  css  js  c++  java
  • python lambda函数

    python defpython lambda 这2个有相似点也有不同点,今天给大家分享下自己的心得吧。
    先说说2个的相似点: 这两个很重要的相似点就是都可以定义一些固定的方法或者是流程,供给程序来调用,比如我们要定义一个变量加2的方法。 
    首先看python def吧。
     

    def info(x):
        return x + 2

    a = info(1)
    print a
     

     再看下python lambda 
    f = lambda x : x+2
    a = f(1) 
    print a 

    上面2种方式输出的结果都是3,如果你要完成一些固定的流程的话,上面两种你都可以任意选择。

    上面说到了相同点,现在说说不同点吧。
    它们的主要不同点是python def 是语句而python lambda是表达式,理解这点对你了解它们很重要。 下面看看他们的应用吧。 
    首先在python 里面语句是可以嵌套的,比如你需要根据某个条件来定义方法话,那只能用def了。
     你用lambda就会报错了。

    a = 2

    if a > 1:
        def info():
            print 'haha'
    else:
        def test():
            print 'test'
     

    而有的时候你需要在python 表达式里操作的时候,那需要用到表达式嵌套,这个时候python def就不能得到你想要的结果,那只能用python lambda 
    下面给个例子:

    题目: 输出a字符串出现频率最高的字母:
    a = "aAsmr3idd4bgs7Dlsf9eAF"
    l = ([(x,a.count(x)) for x in set(a)])
    l.sort(key = lambda k:k[1],reverse=True)
    print l[0][0]
     

    通过上面的例子,希望你能很好的理解python def和lambda的相同和不同点。如果你对python函数感兴趣的话,可以看看: python 函数返回值 ,python 函数参数

    一篇文章:

    1. >>>def f(x): 
    2. ...    return 2**x 
    3. ... 
    4. >>>f(3
    5. 8 
    6. >>> 

    我们可以用lambda函数实现: 清单2

    1. >>> a = lambda x:2**x 
    2. >>> a(3
    3. 8 
    4. >>> 

    当然也可以写成更简单方式: 清单3

    1. >>>(lambda x:2**x)(3
    2. 8 
    3. >>> 

    我们注意lambda函数与其他函数语法定义不同的地方: 1、参数列表周围没有括号 2、没有 return 关键字(它是隐含存在的,因为整个函数只有一行) 3、该函数没有函数名称,但是可以将它赋给一个变量来使用,此时变量中是lambda函数的引用 lambda 是一种风格问题。不一定非要使用它。假如你在你的项目中大量使用 lambda 函数,你会发现你的程序变得非常难于维护.(参考:<dive into python>) 我们再来看一个例子来深入学习: 清单4

    
    
    1. >>>a, b = 24 #a=2, b=4 
    2. >>>(lambda x:x*x)(a and b) 
    3. 16 
    4. >>>(lambda x:x*x)(a or b) 
    5. 4 
    6. >>> 

    如果你学习过其他编程语言,比如 C 或者 pascal ,一定对形如 bool? a:b 这样的表达式很熟悉,当然python中也有类似的表达式,但是我们现在讨论的是将类似的表达式放到 lambda 函数中去,所以这时我们要用到奇妙的 and 和 or 运算. 来看一个 and 运算的例子: 清单5

    
    
    1. >>>'a' and 'b' 
    2. 'b' 
    3. >>> '' and 'b' 
    4. '' 
    5. >>> 'a' and 'b' and 'c' 
    6. 'c' 

    1、使用 and 时,表达式从左到右进行运算,按照惯例,0,'',(),{},[],None 在布尔运算时为假;除此之外的任何东西都为真. 2、如果表达式中的某个值为假,and 运算返回第一个假值 3、所有值都为真,and 运算返回最后一个真值 在上面的例子中,'' 是第一个假值 来看一个 or 运算的例子: 清单6

    
    
    1. >>>'a' or 'b' 
    2. 'a' 
    3. >>>'' or 'b' 
    4. 'b' 
    5. >>>'' or [] or {} 
    6. {} 
    7. >>>def func(): 
    8. ...    print "in func()" 
    9. ...    return 1 
    10. >>>'a' or func() 
    11. 'a' 

    1、or 的运算顺序和 and 相同,都是从左到右 2、它返回第一个真值,而且是立即返回,这意味着它将放弃后面的比较。(如果人生也能如此简单就好了) 3、如果所有的值都为假,它返回最后一个假值 现在我们回过头来再去看清单4中的例子,是不是觉得简单多了? 呵呵,是的,python 还有很多神奇之处,我会在学习的过程中不断的和大家分享。 本文来自 python吧 ,

    更多参考:http://woodpecker.org.cn/diveintopython/power_of_introspection/lambda_functions.html

  • 相关阅读:
    使用SpringBoot校验客户端传来的数据
    在RestController中获取各种信息的方法
    SpringBoot的文件上传&下载
    Maximum upload size exceede上传文件大小超出解决
    在SpringBoot程序中记录日志
    使用IDEA配置SpringBoot热部署无效解决
    RESTful API是什么?
    IDEA如何配置jdk路径
    使用IDEA集成Spring框架时右下角警戒
    Spring框架各模块功能介绍
  • 原文地址:https://www.cnblogs.com/youxin/p/3157193.html
Copyright © 2011-2022 走看看