• python 中的三元表达式及lambda


    一、三元表达式
    举一个简单的列子,很多地方都有这样的规定,比如用水或者用电,假设用水价格为3R/立方米,当你每个月用超过7立方米后,超出的水按照3.3R/立方米计价。然后写一个程序计算一个家庭每月的水费。
    
    >>> def cost(x):
    ...     if x < 7 :
    ...         pay = x*3
    ...     elif x > 7:
    ...         pay = 21 + (x-7)*3.3
    ...     return pay
    

    这个程序段非常简单,逻辑就不用说了,条件不同计价方式就不一样,但是当我们用三元表达式去写同样功能的这段函数是这样的 pay = x*3 if x < 7 else (21+(x-7)*3.3)
    再来一个简单的例子,两个数,我们返回其中较大的那个数。

    >>> def max_(a, b):
    ...     if a > b:
    ...         max = a
    ...     else:
    ...         max = b
    ...     return max
    

    当用三元表达式来来写就可以是:max = a if a > b else b 看起来就简洁很多了,这才是Python吗!

    二、lambda
    >>> def add(x, y)
    ...     sum = x+y
    ...     return sum
    

    用lambda表达式来写就是:add = lambda x, y:x+y 然后直接调用add(1, 2)就可以得到结果
    如果把三元式中的cost函数列子用lambda表达式来写就是:再增加一个抄表服务费,参数s

    >>> cost = lambda x, s: (x*3 if x < 7 else (21+(x-7)*3.3)) + s
    >>> cost(6, 4)
    22
    

    可以看到lambda的使用让我们大量的简化了代码,看起来更美观简洁,当然是牺牲了一些可读性,让不熟悉Python的人看得不是很明白
    下面介绍一个列子来了解为什么要用lambda
    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)

    在Visual Basic,你很有可能要创建一个函数,接受一个字符串参数和一个 collapse 参数,并使用 if 语句确定是否压缩空白,然后再返回相应的值。这种方式比较低效,因为函数可能需要处理每一种可能的情况。每次你调用它,给出你结果前,都要判断是否要压缩空白。在 Python 中,你可以将决策逻辑拿到函数外面,而定义一个裁减过的 lambda 函数提供确切的 (唯一的) 你想要的。这种方式更为高效、更为优雅,而且很少引起那讨厌的bug。`
    
    lambda 定义了一个匿名函数
    
    lambda 并不会带来程序运行效率的提高,只会使代码更简洁。
    
    如果可以使用for...in...if来完成的,坚决不用lambda。
    
    如果使用lambda,lambda内不要包含循环,尽量定义函数来完成,使代码获得可重用性和更好的可读性。
    
    总结:lambda 是为了减少单行函数的定义而存在的。
    人生还有意义。那一定是还在找存在的理由
  • 相关阅读:
    反射
    定义类
    集合list,set,Map
    API util
    进程与多线程
    泛型
    API string
    JDBC存储过程
    预处理
    JDBC
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9339563.html
Copyright © 2020-2023  润新知