Python中AND-OR的用法
学习Python中的lambda函数的时候,才发现原来Python中的AND和OR还可以有一些别的用法。Python中的布尔逻辑计算的结果并非返回布尔值,而是返回它们相互之间的某一个。文章的部分例子来源于Dive Into Python。
AND
AND的表达式返回所遇到的第一个假值,如果表达式中无假值,则返回表达式中最后一个值。在Python中,0、‘’、[]、()、None这五个值在布尔环境中为假,例子如下:
>>>() and 'foo'
()
>>>'python' and 'foo' and 'lambda'
'lambda'
第一个表达式中,()为假,所以表达式从左到右计算,返回第一个假值。而第二个表达式中,并没有假值,所以返回最后一个真值。
OR
OR的表达式和And表达式一样也是从左到右的计算,计算的结果为所遇到的第一个真值,如果表达式无真值,就返回表达式最后一个假值。例子如下:
>>>'' or 'python'
'python'
>>>'' or () or {}
{}
第一个表达式中,从左到右计算,'python'字符串为第一个真值,返回它。第二个表达式中,所以个值都为假,返回最后一个假。
AND-OR 技巧
Python中可以使用AND-OR来模拟C中的bool ? a : b 的表达式。先看个例子:
>>>a = 'first'
>>>b = 'second'
>>>1 and a or b
'first'
>>>0 and a or b
'second'
这样使用AND-OR就可以达到了bool ? a : b的要求。但其中有个问题,假如a值为假值得话,最后的结果就不是我们想要的了。
>>>a = ''
>>>b = 'second'
>>>1 and a or b
'second'
a为假,所以 1 and a 为 '',''和'second'计算的结果为'second'。其实我们可以利用下面的技巧来安全的使用AND-OR。
>>> a = ""
>>> b = "second"
>>> (1 and [a] or [b])[0]
通过使用非空列表的方式,防止a和b为假值。这样就达到目的了啊!有的时候我们可以将这样的用法和lambda表达式结合在一起用,比如下面这个表达式:
processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
这是一个lambda函数,假如collapse为真,则将s中所有的空白去除,假如为假的话,则保留这些空白。
Python中AND-OR的用法的更多相关文章
- Python中 sys.argv[]的用法
Python中 sys.argv[]的用法 因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果,也在网上 ...
- 31 Python中 sys.argv[]的用法简明解释(转)
Python中 sys.argv[]的用法简明解释 因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果, ...
- Python中sorted()方法的用法
Python中sorted()方法的用法 2012-12-24 22:01:14| 分类: Python |字号 订阅 1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对i ...
- Python中int()函数的用法浅析
int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int) Help on class int in module __builti ...
- Python中 sys.argv的用法简明解释
Python中 sys.argv[]的用法简明解释 sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白.因为我们从外部取得 ...
- python中super()的一些用法
在看python高级编程这本书的时候,在讲到super的时候,产生了一些疑惑,super在python中的用法跟其他的语言有一些不一样的地方,在网上找了一些资料,发现基本上很少有文章能把我的疑惑讲明白 ...
- Python中return self的用法
在Python中,有些开源项目中的方法返回结果为self. 对于不熟悉这种用法的读者来说,这无疑使人困扰,本文的目的就是给出这种语法的一个解释,并且给出几个例子. 在Python中,retur ...
- (数据科学学习手札53)Python中tqdm模块的用法
一.简介 tqdm是Python中专门用于进度条美化的模块,通过在非while的循环体内嵌入tqdm,可以得到一个能更好展现程序运行过程的提示进度条,本文就将针对tqdm的基本用法进行介绍. 二.基本 ...
- python中reload(module)的用法,以及错误提示
1.Python2中可以和Python3中关于reload()用法的区别. Python2 中可以直接使用reload(module)重载模块. Pyhton3中需要使用如下两种方式: 方式(1) ...
- Python中的一些模块用法
python中os模块用法 python之模块之shutil模块 -------------------------------os模块-------------------------------- ...
随机推荐
- WPF中TreeView数据结构解析
XAML.CS代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- 网页icon和文本对齐神技 2016.03.23
一直以来icon和文本需要对齐都使用vertical-align: middle;的方法,但兼容性不理想.参考了鑫旭大大的博客,终于收获不用vertical-align可以对齐的神技,原博点这里. 代 ...
- [lua]协同式多任务,统筹运用
-- CPM:关键路径法(Critical Path Method) jobBase = { schedule = function ( self, job, task, ... ) --由具体job ...
- MVVM模式应用 之为ApplicationBarIconButton 添加Command操作属性
在学习MVVM的过程中,总是会遇到挫折,一碰到就是花费好长时间去解决..唉,不求量,只求质. 第一种(已经实践成功): (1)http://bindableapplicationb.codeplex. ...
- Linux下安装gcc 、g++ 、gfortran编译器
一.ubuntu下gcc/g++/gfortran的安装 1.安装 (1).gcc ubuntu下自带gcc编译器.可以通过“gcc -v”命令来查看是否安装. (2).g++ 安装g++编译器,可以 ...
- .Net4.0 ashx页面报错:检测到有潜在危险的Request.Form值(转)
原地址:http://zzhi191.blog.163.com/blog/static/1350849520111116518067/ web开发中难免要多到ajax技术. asp.net中我们处理a ...
- SecurityCRT输出日志重定向
使用CRT进行抓取log,因为工具本省缓冲区有限,导致,刷屏特别快,可能会错过一些log,可以对CRT的log进行增加输出源,或者说将输出到控制台的log再输出到本地文件中: 文件->点击(勾选 ...
- NSURLSession -- 实际开发中运用
NSURLSession实际请求 iOS9使用http请求方法: 在工程info.plist文件内添加NSAppTransportSecurity键,类型为dictionary 在NSAppTrans ...
- 学习Swift -- 泛型
泛型 泛型代码可以让你写出根据自我需求定义.适用于任何类型的,灵活且可重用的函数和类型.它的可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码的意图. 泛型所解决的问题 先来看一个交换两个int ...
- QueryRunner的使用
在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,老佟给我们详尽介绍了一个简化JDBC操作的组件——D ...