学习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的用法的更多相关文章

  1. Python中 sys.argv[]的用法

    Python中 sys.argv[]的用法 因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果,也在网上 ...

  2. 31 Python中 sys.argv[]的用法简明解释(转)

    Python中 sys.argv[]的用法简明解释 因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果, ...

  3. Python中sorted()方法的用法

    Python中sorted()方法的用法 2012-12-24 22:01:14|  分类: Python |字号 订阅 1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对i ...

  4. Python中int()函数的用法浅析

      int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int)  Help on class int in module __builti ...

  5. Python中 sys.argv的用法简明解释

    Python中 sys.argv[]的用法简明解释 sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白.因为我们从外部取得 ...

  6. python中super()的一些用法

    在看python高级编程这本书的时候,在讲到super的时候,产生了一些疑惑,super在python中的用法跟其他的语言有一些不一样的地方,在网上找了一些资料,发现基本上很少有文章能把我的疑惑讲明白 ...

  7. Python中return self的用法

      在Python中,有些开源项目中的方法返回结果为self. 对于不熟悉这种用法的读者来说,这无疑使人困扰,本文的目的就是给出这种语法的一个解释,并且给出几个例子.   在Python中,retur ...

  8. (数据科学学习手札53)Python中tqdm模块的用法

    一.简介 tqdm是Python中专门用于进度条美化的模块,通过在非while的循环体内嵌入tqdm,可以得到一个能更好展现程序运行过程的提示进度条,本文就将针对tqdm的基本用法进行介绍. 二.基本 ...

  9. python中reload(module)的用法,以及错误提示

    1.Python2中可以和Python3中关于reload()用法的区别. Python2 中可以直接使用reload(module)重载模块.   Pyhton3中需要使用如下两种方式: 方式(1) ...

  10. Python中的一些模块用法

    python中os模块用法 python之模块之shutil模块 -------------------------------os模块-------------------------------- ...

随机推荐

  1. javascript 动态操作Html

    <html> <body> <p>aaaaa</p> <input type="button" value="con ...

  2. oracle sql语句

    一.ORACLE的启动和关闭1.在单机环境下要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下su - oracle a.启动ORACLE系统oracle>svrmgrlSVRM ...

  3. iOS 十六进制的相加取反

    ios中将NSstring字符串转换成char类型 NSString *string = [NSString stringWithFormat:@"5D"]; const char ...

  4. mysql 刘道成视频教程1、2课----------大致结构

    第1课 第2课 一.整体结构 1.mysql -h localhost -u root -p *** 如果-h不写,则默认连接localhost. 2.连接服务器成功,-------> 显示数据 ...

  5. Struts2文件配置 登陆页面

    Struts 版本号 struts-2.3.16.3 web.xml 配置 <?xml version=”1.0″ encoding=”UTF-8″?> <web-app versi ...

  6. 百度地图API绘制带头箭头的折线

    源代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" co ...

  7. 理解Php中的Static

    ① 使用 static 可以将类中的成员标识为静态的,既可以用来标识成员属性,也可以用来标识成员方法,比如: <?php class China { public static $boy = 1 ...

  8. 隐藏input边框(ie6、ie7)

    去掉元素的边框,我们一贯使用border:none; 但在ie6.ie7下的input[type=text]元素,并没有去掉. 两种解决方案: 1. border:none; 并设置背景backgro ...

  9. Junit4 架构设计系列(1): Request,ClassRequest 和 RunnerBuilder

    Overall Junit的成功已不言而喻,其广泛应用于单元测试,测试驱动开发领域.大量的工具,IDE都集成了JUnit,著名的有Maven,Ant,Eclipse,甚至像Google SDK提供的A ...

  10. 从零开始学习MySQL3---数据库的基本操作

    创建数据库 MySQL安装完成后,将会在其Data目录下自动创建几个必需的数据库 可以用  SHOW DATABASES: 来查看当前存在的数据库 创建数据库是在系统磁盘上划分一块区域用于数据的存储和 ...