在Python中,可以通过and,or和not进行逻辑运算,下面就来看看and和or的简单介绍。

逻辑与-and

对于包含and运算的表达式,Python解释器将从左到右扫描,返回第一个为假的表达式值,无假值则返回最后一个表达式值

下面看一个使用and的例子:

# if all the expressions are true, return the last expression
print {"name": "Will"} and "hello" and 1 # return the first false expression
print {"name": "Will"} and "" and 1
print {"name": "Will"} and [] and 1
print {} and [] and None
print {"name": "Will"} and [1] and None

代码的输出为下:

逻辑或-or

对于包含or运算的表达式,Python解释器将从左到右扫描,返回第一个为真的表达式值,无真值则返回最后一个表达式值

看下面的例子:

# if all the expressions are false, return the last expression
print {} or [] or None # return the first true expression
print {"name": "Will"} or "hello" or 1
print {} or [1] or 1
print {} or [] or "hello"

代码的输出如下:

三目运算符

很多语言中都支持三目运算符"bool?a:b",虽然在Python中不支持三目运算符,但是可以通过and-or达到同样的效果。

expression_1 and expression_2 or expression_3

看代码:

a = "hello"
b = "will" # bool?a:b
print True and a or b
print False and a or b

这个例子通过and-or模拟了三目运算符,当第一个表达式expression_1为True的时候,整个表达式的值就是expression_2表达式的值:

安全的and-or

其实上面使用and-or模拟三目运算符的方式并不安全,看下图:

如果expression_2本身的值就是False,那么无论expression_1的值是什么,"expression_1 and expression_2 or expression_3"的结果都会是expression_3。

可以通过简单的代码就行验证:

a = []
b = "will" # bool?a:b
print True and a or b
print False and a or b

代码输出为:

那么为了避免这种问题,可以使用下面的方法,将expression_2和expression_3存放在list中:

(expression_1 and [expression_2] or [expression_3])[0]

例如:

a = []
b = "will" # bool?a:b
print (True and [a] or [b])[0]
print (False and [a] or [b])[0]

代码的运行效果为下,即使expression_2为False,但是[expression_2]仍是非空列表:

总结

本文通过一些简单的例子,演示了Python中and和or的使用。

并通过and-or方式实现了三目运算符的效果。

Python中的and/or的更多相关文章

  1. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

  2. python中的Ellipsis

    ...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...

  3. python中的默认参数

    https://eastlakeside.gitbooks.io/interpy-zh/content/Mutation/ 看下面的代码 def add_to(num, target=[]): tar ...

  4. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

  5. python中的TypeError错误解决办法

    新手在学习python时候,会遇到很多的坑,下面来具体说说其中一个. 在使用python编写面向对象的程序时,新手可能遇到TypeError: this constructor takes no ar ...

  6. python中的迭代、生成器等等

    本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...

  7. python2.7高级编程 笔记二(Python中的描述符)

    Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...

  8. python cookbook 学习系列(一) python中的装饰器

    简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...

  9. 用 ElementTree 在 Python 中解析 XML

    用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...

  10. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

随机推荐

  1. UMEditor(Ueditor mini)修改图片上传路径

    UMEditor(Ueditor mini)修改图片上传路径 imageUp.ashx string pathbase = "/UpLoad/images/"; //保存文件夹在网 ...

  2. PCL滤波介绍(1)

    在获取点云数据时 ,由于设备精度,操作者经验环境因素带来的影响,以及电磁波的衍射特性,被测物体表面性质变化和数据拼接配准操作过程的影响,点云数据中讲不可避免的出现一些噪声.在点云处理流程中滤波处理作为 ...

  3. Linux 下用管道执行 ps aux | grep 进程ID 来获取CPU与内存占用率

    #include <stdio.h> #include <unistd.h>   int main() {     char caStdOutLine[1024]; // ps ...

  4. 字符串分隔 ->连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

        •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100 ...

  5. ITSM运营实施案例 - 汽车行业

    M公司是在汽车行业知名TOP企业,在日常运营过程中有如下问题: ******************************************************************** ...

  6. 第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用

    第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用 xpath表达式 //x 表示向下查找n层指定标签,如://div 表示查找所有div标签 /x 表示向下查找一层指定的标签 ...

  7. Java如何使用重载方法处理异常?

    在Java编程中,如何使用重载方法处理异常? 此示例显示如何使用重载方法来处理异常.需要在每个方法中使用try catch块. package com.yiibai; public class Exc ...

  8. android 解决输入法键盘遮盖布局问题

    /**     * @param root 最外层布局,需要调整的布局     * @param scrollToView 被键盘遮挡的scrollToView,滚动root,使scrollToVie ...

  9. C#实现windows服务安装,服务名可配置时出问题(无法创建 ProjectInstaller 安装程序类型的实例)

    [参考资料]Windows 安装服务 的两种方式 一.问题出在System.Configuration.ConfigurationManager.AppSettings[""].T ...

  10. Spring简单集成Redis