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 是为了减少单行函数的定义而存在的。
python 中的三元表达式及lambda的更多相关文章
- python中类似三元表达式的写法
python中没有其它语言中的三元表达式,如: a = x > y ? m : n; python中的类似写法为: a = 1 b = 2 h = "" h = " ...
- python中的三元表达式(三目运算符)
python中没有其他语言中的三元表达式,不过有类似的实现方法 其他语言中,例如java的三元表达式是这样 int a = 1; String b = ""; b = a > ...
- 【python】python 中的三元表达式(三目运算符)
python中的三目运算符不像其他语言其他的一般都是 判定条件?为真时的结果:为假时的结果 如 result=5>3?1:0 这个输出1,但没有什么意义,仅仅是一个例子.而在python中的格式 ...
- python中的三元表达式
if B = True: return A else: return C 用三元表达式可以写成: return A if B else C
- python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义
复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...
- Python中的三元运算符
Python中的三元运算符 对于如下需求: if var1>1 : goal = "执行表达式1" else: goal = "执行表达式2" 1.在其他 ...
- Python 中的三元运算(软件测试中运用)
前言 在java中,有类似于 (condition) ? a :b 这样的语法,表示如果condition 为真,返回a,反之返回b.我们称之为三元运算. 那Python中,有没有这样的语法呢,非常遗 ...
- HTML中的三元表达式,灵活的使用or逻辑判断
08.27自我总结 HTML中的三元表达式 判断内容 ? 满足返回的值 : 不满足返回的值 灵活使用or逻辑判断 比如我们某个变量为空的时候返回他另外个值 var a = msg || '没有消息'
- Python中特殊函数和表达式lambda,filter,map,reduce
1.lambda:使用lambda表达式可以定义一个匿名函数 lambda表达式是一种简洁格式的函数.该表达式不是正常的函数结构,而是属于表达式的类型 (1)基本格式: lambda 参数,参数... ...
随机推荐
- [Eclipse+PyDev]ImportError: DLL load failed:找不到指定的模块 解决方案
1. 环境 Eclipse 4.4.2 Python 3.5 Window 8.1 2. 问题 在代码中import numpy时,提示 " ImportError: DLL load fa ...
- 【原创】Linux常用命令记录
1. 查看网络状态分布 #!/bin/sh netstat -apn >/dev/ \ | awk 'BEGIN {printf("%-15s%-15s%-15s%-15s\n&quo ...
- pThreads线程(一) 基本API
1.创建线程 int pthread_create(pthread_t *restrict_ptid, const pthread_attr_t *restrict_att ...
- gitlab 使用流程
gitlab 使用流程 1. 开发人员写代码,开发产品. 2. 测试人员进行测试,如果发现bug, 填写 Issues - List - new issus 3. 开发人员修复bug, 从master ...
- 1.9 Android程序签名打包
本节引言: 本节给大家介绍的是如何将我们的程序打包成Apk文件,并且为我们的Apk签名! 1.什么是签名,有什么用: Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到 ...
- cryptopunks测试代码cryptopunksmarket-setinitial.js
require('babel-polyfill'); //测试用例要在执行完了truffle compile和truffle migrate后才能使用truffle test来进行测试 //要注意ar ...
- js == 与 === 的区别[转]
we文章转自http://blog.sina.com.cn/s/blog_4b32835b01014iv9.html 1.对于string,number等基础类型,==和===是有区别的 1)不同类型 ...
- <计算机网络>计算机网络和应用层
1.端系统通过通信链路和分组交换机连接在一起,构成网络.网络和网络之间通过路由器相连,组成了因特网. 2.ISP(Internet Service Provider)因特网服务提供商.端系统通过ISP ...
- PAT A1108 Finding Average (20 分)——字符串,字符串转数字
The basic task is simple: given N real numbers, you are supposed to calculate their average. But wha ...
- Objective-C autoreleasepool深入理解
Objective-C autorelease // main.m int main(int argc, char * argv[]) { @autoreleasepool { } } clang - ...