一、三元表达式
举一个简单的列子,很多地方都有这样的规定,比如用水或者用电,假设用水价格为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 是为了减少单行函数的定义而存在的。

python 中的三元表达式及lambda的更多相关文章

  1. python中类似三元表达式的写法

    python中没有其它语言中的三元表达式,如: a = x > y ? m : n; python中的类似写法为: a = 1 b = 2 h = "" h = " ...

  2. python中的三元表达式(三目运算符)

    python中没有其他语言中的三元表达式,不过有类似的实现方法 其他语言中,例如java的三元表达式是这样 int a = 1; String b = ""; b = a > ...

  3. 【python】python 中的三元表达式(三目运算符)

    python中的三目运算符不像其他语言其他的一般都是 判定条件?为真时的结果:为假时的结果 如 result=5>3?1:0 这个输出1,但没有什么意义,仅仅是一个例子.而在python中的格式 ...

  4. python中的三元表达式

    if B = True: return A else: return C 用三元表达式可以写成: return A if B else C

  5. python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义

    复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...

  6. Python中的三元运算符

    Python中的三元运算符 对于如下需求: if var1>1 : goal = "执行表达式1" else: goal = "执行表达式2" 1.在其他 ...

  7. Python 中的三元运算(软件测试中运用)

    前言 在java中,有类似于 (condition) ? a :b 这样的语法,表示如果condition 为真,返回a,反之返回b.我们称之为三元运算. 那Python中,有没有这样的语法呢,非常遗 ...

  8. HTML中的三元表达式,灵活的使用or逻辑判断

    08.27自我总结 HTML中的三元表达式 判断内容 ? 满足返回的值 : 不满足返回的值 灵活使用or逻辑判断 比如我们某个变量为空的时候返回他另外个值 var a = msg || '没有消息'

  9. Python中特殊函数和表达式lambda,filter,map,reduce

    1.lambda:使用lambda表达式可以定义一个匿名函数 lambda表达式是一种简洁格式的函数.该表达式不是正常的函数结构,而是属于表达式的类型 (1)基本格式: lambda 参数,参数... ...

随机推荐

  1. 关于new

    JS通过new关键字,可以调用相关的 构造方法 生成一个 对象 ,function ---> object

  2. 管道流_PipedInputStream与PipedOutputStream

    输入和输出可以直接进行连接,通过结合线程使用(一个线程用于写,另一个用于读,因为管道输入流(读)是要读取管道输出流的数据的,又因为输入流中的read方法是阻塞式的,当两个流在同一个线程中时,输入流的r ...

  3. 计算器和Menu

    MainActivity.java import android.app.Activity; import android.content.Intent; import android.os.Bund ...

  4. swift的调用约定

    swift的静态绑定 Swift Calling Convention @convention(swift) func foo(_ x:Int, y:Int) sil @foo : $(x:Int, ...

  5. AJAX基础知识点学习

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangyibin628/article/details/28281003 1.AJAX(Async ...

  6. 双目SLAM(1) 总配置

    kitti 数据集   图像+相机参数 sgbm gpu     算深度 cuda sifi       算匹配点 rabsac         随机筛选 1)CUDA配置(自己配置)8.0 参考网页 ...

  7. go标准库的学习-mime

    参考:https://studygolang.com/pkgdoc 导入方法: import "mime" mime实现了MIME的部分规定. 什么是MIME: MIME(Mult ...

  8. 文件上传之Servlet

    导包 commons-fileupload-1.3.1.jar commons-io-2.2.jar import java.io.File; import java.io.FileOutputStr ...

  9. <<Linux kernel development>> Process Management

    The Process On modern operating systems,processes provide two virtualizations:a virtualized processo ...

  10. PAT A1136 A Delayed Palindrome (20 分)——回文,大整数

    Consider a positive integer N written in standard notation with k+1 digits a​i​​ as a​k​​⋯a​1​​a​0​​ ...