Python中的短路计算

在Python中,布尔类型还可以与其他数据类型做 and、or和not运算,请看下面的代码:

In [1]: a = True
In [2]: print(a and ‘a=T‘ or ‘a=F‘)
a=T

输出为: a=T

计算结果不是布尔类型,而是字符串 a=T,这是为什么呢?

因为Python把0、空字符串‘‘和None看成 False,其他数值和非空字符串都看成 True,所以:

True and ‘a=T‘ 计算结果是 ‘a=T‘ 
继续计算 ‘a=T‘ or ‘a=F‘ 计算结果还是 ‘a=T‘ 
要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计算。

  在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。

  在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。

所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。

再看下列案例:

In [3]: a = "python"
In [4]: print("hello,", a or "world")
hello, python
In [5]: b = ‘‘
In [6]: print("hello,", b or "world")
hello, world

原文地址:https://blog.csdn.net/Datawhale/article/details/80928137

原文地址:https://www.cnblogs.com/yxtz271828/p/10790407.html

时间: 2024-10-18 20:51:51

Python中的短路计算的相关文章

Python中的简单计算

Python中的简单计算 (1)基本的加减乘除 >>> 2 + 2 4 >>> 50 - 5*6 20 >>> (50 - 5*6) / 4 5.0 >>> 8 / 5  1.6 (2)除法总是会返回一个浮点数,想要返回整数,需要用"//"来表示(floor division),另外,可以用"%"进行取余操作 >>> 17 / 3  # classic division ret

Python中 and,or 的计算规则

一.纯 and 和 or 语句 1. 在纯and语句中,如果每一个表达式都不是假的话,那么返回最后一个,因为需要一直匹配直到最后一个.如果有一个是假,那么返回假2. 在纯or语句中,只要有一个表达式不是假的话,那么就返回这个表达式的值.只有所有都是假,才返回假3. 在or和and语句比较难表达,总而言之,碰到and就往后匹配,碰到or如果or左边的为真,那么就返回or左边的那个值,如果or左边为假,继续匹配or右边的参数. (False or 1) 输出1 (1 or False) 输出1 (T

Python中布尔类型

我们已经了解了Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算: 与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True   # ==> TrueTrue and False   # ==> FalseFalse and True   # ==> FalseFalse and False   # ==> False或运算:只要有一个布尔值为 True,计算结果就是 True. True or

python中的条件语句,分支语句以及逻辑运算符和比较运算符

python中的if与else语句可执行简单测试 如: a = 3; b = 5; if a<b:     print('a小b大') else:     print('a大b小') 答案输出: a小b大 我对条件判断if的理解:     所谓条件判断其实就是 如果 a<b 我们做相应的处理 否则(a大于b的情况) 我们对a>b做出相应的处理  我们在判断某个变量或者某个表达式 只对真的时候作出相应的处理时else是可选的 比如: name = '张三' isMarry = 'true'

python 中的字符串转义序列、字符串格式化、操作符、关键字总结

1.字符串转义序列 转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制表符 \t 横向制表符 \r 回车 \f 换页 \oyy 八进制数yy代表的字符,例如:\o12代表换行 \xyy 十进制数yy代表的字符,例如:\x0a代表换行 \other 其它的字符以普通格式输出 2.字符串格式化 3.操作符 一.算术运算符 注意: 双斜杠 // 除法总是向下取整. 从符点

Python-布尔类型与短路计算-03.15-yulong

布尔类型与短路计算 我们已经了解了Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算: 与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True # ==> TrueTrue and False # ==> FalseFalse and True # ==> FalseFalse and False # ==> False 或运算:只要有一个布尔值为 True,计算结果就是 True. True

python中的那些“神器”

"武林至尊,宝刀屠龙,号令天下,莫敢不从,倚天不出,谁与争锋",这是神器.不过今天要说的python中的"神器"就没有这么厉害了,这里要说的"神器"其实就是名称里面带了个"器"的,如下: 列表解析器 迭代器 生成器 装饰器 列表解析器 现在遇到了这样一个问题需要解决:"有一个数字的列表,要求对该列表中的奇数乘以2,返回处理完成后的列表(不改变原来列表的顺序,仅对列表中的奇数乘以2)",比较传统的方法可能会是

Python中time模块详解

在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同. UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST

python 中的高阶函数

函数名其实就是指向函数的变量 >>> abs(-1) 1 >>> abs <built-in function abs> >>> a=abs >>> a(-1) 1 高阶函数:能接收函数做变量的函数 >>> def abc(x,y,f): ... return f(x)+f(y) ... >>> abc(-2,3,abs) 5 python中的内置高阶函数 map()函数和reduce(