Python and、or以及and-or语法总结


Posted in Python onApril 14, 2015

一、and:

在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一。

>>> 'a' and 'b' 'b' >>> '' and 'b' '' >>> 'a' and 'b' and 'c' 'c'

在布尔上下文中从左到右演算表达式的值,如果布尔上下文中的所有值都为真,那么 and 返回最后一个值。

如果布尔上下文中的某个值为假,则 and 返回第一个假值

二、or:

>>> 'a' or 'b' 'a' >>> '' or 'b' 'b' >>> '' or [] or {}

{} >>> 0 or 'a' or 'c' 'a'

[code]

使用 or 时,在布尔上下文中从左到右演算值,就像 and 一样。如果有一个值为真,or 立刻返回该值
如果所有的值都为假,or 返回最后一个假值
注意 or 在布尔上下文中会一直进行表达式演算直到找到第一个真值,然后就会忽略剩余的比较值
三、and-or:
and-or 结合了前面的两种语法,推理即可。
[code]

>>> a='first' >>> b='second' >>> 1 and a or b 'first' >>> (1 and a) or b 'first' >>> 0 and a or b 'second' >>> (0 and a) or b 'second' >>>

这个语法看起来类似于 C 语言中的 bool ? a : b 表达式。整个表达式从左到右进行演算,所以先进行 and 表达式的演算。 1 and 'first' 演算值为 'first',然后 'first' or 'second' 的演算值为 'first'。

0 and 'first' 演算值为 False,然后 0 or 'second' 演算值为 'second'。

and-or主要是用来模仿 三目运算符 bool?a:b的,即当表达式bool为真,则取a否则取b。

and-or 技巧,bool and a or b 表达式,当 a 在布尔上下文中的值为假时,不会像 C 语言表达式 bool ? a : b 那样工作。

四、安全使用and-or

>>> a="" >>> b="second" >>> (1 and [a] or [b])

[''] >>> (1 and [a] or [b])[0] '' >>>

由于 [a] 是一个非空列表,所以它决不会为假。即使 a 是 0 或者 '' 或者其它假值,列表 [a] 也为真,因为它有一个元素。

一个负责的程序员应该将 and-or 技巧封装成一个函数:

def choose(bool,a,b): return (bool and [a] or [b])[0] print choose(1,'','second') #''
Python 相关文章推荐
Python2.5/2.6实用教程 入门基础篇
Nov 29 Python
在Python 3中实现类型检查器的简单方法
Jul 03 Python
python语言使用技巧分享
May 31 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
Python爬取成语接龙类网站
Oct 19 Python
python中的单引号双引号区别知识点总结
Jun 23 Python
Python:slice与indices的用法
Nov 25 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
详解Python的爬虫框架 Scrapy
Aug 03 Python
python中count函数知识点浅析
Dec 17 Python
Python线程的两种编程方式
Apr 14 #Python
Python中的测试模块unittest和doctest的使用教程
Apr 14 #Python
利用Python中的输入和输出功能进行读取和写入的教程
Apr 14 #Python
对于Python编程中一些重用与缩减的建议
Apr 14 #Python
归纳整理Python中的控制流语句的知识点
Apr 14 #Python
Python中为什么要用self探讨
Apr 14 #Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 #Python
You might like
PHP6 先修班 JSON实例代码
2008/08/23 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
在Docker上开始部署Python应用的教程
2015/04/17 Python
Python实现大文件排序的方法
2015/07/10 Python
python数据结构之列表和元组的详解
2017/09/23 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
Python实现打印实心和空心菱形
2019/11/23 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
一个精品风格的世界:Atterley
2019/05/01 全球购物
国贸专业个人求职信范文
2014/01/08 职场文书
小学美术教学反思
2014/02/01 职场文书
财务会计专业求职信
2014/06/09 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
MySQL创建管理子分区
2022/04/13 MySQL
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle
Python Matplotlib绘制动画的代码详解
2022/05/30 Python