python中bool运算符按优先级顺序分别有orandnot, 其中orand为短路运算符

not先对表达式进行真值测试后再取反

not运算符值只有1个表达式,not先对表达式进行真值测试后再取反,返回的结果不是True就是False

>>> expression1 = ''
>>> expression2 = '1'
>>> not expression1
True
>>> not expression2
False

orand运算符返回的结果是操作符两边的表达式中的符合逻辑条件的其中一个表达式的结果

在其它语言中,比如C#,bool运算的结果肯定也是bool值;但是python中不是这样的,它返回的是满足bool运算条件的其中一个表达式的值。

  • x or y

xTrue,则结果为x;若xFalse, 则结果为y

>>> expression1 = '1'
>>> expression2 = '2'
>>> expression1 or expression2
'1'
>>> expression2 or expression1
'2'
  • x and y

xFalse,则结果为x;若xTrue, 则结果为y

>>> expression1 = ''
>>> expression2 = {}
>>> expression1 and expression2
''
>>> expression2 and expression1
{}

orand运算符是短路运算符

短路运算符的意思是,运算符左右的表达式的只有在需要求值的时候才进行求值。比如说x or y,python从左到右进行求值,先对表达式x的进行真值测试,如果表达式x是真值,根据or运算符的特性,不管y表达式的bool结果是什么,运算符的结果都是表达式x,所以表达式y不会进行求值。这种行为被称之为短路特性

#函数功能判断一个数字是否是偶数
def is_even(num):
print('input num is :',num)
return num % 2 == 0 #is_even(1)被短路,不会执行
>>> is_even(2) or is_even(1)
input num is : 2
True >>> is_even(1) or is_even(2)
input num is : 1
input num is : 2
True

orand运算符可以多个组合使用,使用的时候将以此从左到右进行短路求值,最后输入结果

表达式x or y and z,会先对x or y进行求值,然后求值的结果再和z进行求值,求值过程中依然遵循短路原则。

#is_even(2)、is_even(4)均被短路
>>> is_even(1) and is_even(2) and is_even(4)
this num is : 1
False # is_even(1)为False,is_even(3)被短路
# is_even(1) and is_even(3)为False,is_even(5)需要求值
# is_even(1) and is_even(3) or is_even(5)为False,is_even(7)被短路
>>> is_even(1) and is_even(3) or is_even(5) and is_even(7)
this num is : 1
this num is : 5
False

not运算符的优先级比orand高,一起使用的时候,会先计算not,再计算orand的值

>>> is_even(1) or is_even(3)
this num is : 1
this num is : 3
False
>>> not is_even(1) or is_even(3)
this num is : 1
True
>>> is_even(1) or not is_even(3)
this num is : 1
this num is : 3
True
>>>

not运算符的优先级比==!=低,not a == b 会被解释为 not (a == b), 但是a == not b 会提示语法错误。

>>> not 1 == 1
False
>>> 1 == not 1
SyntaxError: invalid syntax
>>> not 1 != 1
True
>>> 1 != not 1
SyntaxError: invalid syntax

Python内置类型(2)——布尔运算的更多相关文章

  1. Python内置类型性能分析

    Python内置类型性能分析 timeit模块 timeit模块可以用来测试一小段Python代码的执行速度. class timeit.Timer(stmt='pass', setup='pass' ...

  2. Python 内置类型 dict, list,线程安全吗

    近段时间发现一个 Python 连接数据库的连接是线程不安全的,结果惹得我哪哪儿都怀疑变量的多线程是否安全的问题,今天终于找到了正确答案,那就是 Python 内置类型 dict,list ,tupl ...

  3. 为什么继承 Python 内置类型会出问题?!

    本文出自"Python为什么"系列,请查看全部文章 不久前,Python猫 给大家推荐了一本书<流畅的Python>(点击可跳转阅读),那篇文章有比较多的"溢 ...

  4. python内置类型详细解释

    文章编写借鉴于内置类型 - Python 3.7.3 文档,主要用于自己学习和记录 python主要内置类型包括数字.序列.映射.类.实例和异常 有些多项集类是可变的.它们用于添加.移除或重排其成员的 ...

  5. Python——内置类型

    Python定义了丰富的数据类型,包括: 数值型:int, float, complex 序列:(iterable) str, unicode, tuple, list, bytearray, buf ...

  6. 易被忽略的Python内置类型

    Python中的内置类型是我们开发中最常见的,很多人都能熟练的使用它们. 然而有一些内置类型确实不那么常见的,或者说往往会被我们忽略,所以这次的主题就是带领大家重新认识这些"不同寻常&quo ...

  7. Python内置类型——set

    Python中,内置类型set和frozenset用来表示集合,我们首先查看这两个类型支持的特殊对象,从而可以理解他们的特性. >>> dir(set) ['__and__', '_ ...

  8. 3、python内置类型(0529)

    python的内置对象类型以及支持的运算 python对象的相关术语 python程序中保存的所有数据都是围绕对象这个概念展开的 程序中存储的所有数据都是对象 每个对象都有一个身份.一个类型和一个值 ...

  9. Python内置类型(4)--数值

    Python有以下三种的数值类型: 整型(integers), 浮点型(floating point numbers), 以及 复数(complex numbers).此外,布尔是整数的子类型. 数值 ...

随机推荐

  1. [自制操作系统] BMP格式文件读取&图形界面系统框架/应用接口设计

    本文将介绍在本人JOS中实现的简单图形界面应用程序接口,应用程序启动器,以及一些利用了图形界面的示例应用程序. 本文主要涉及以下部分: 内核/用户RW/RW调色板framebuffer共享区域 8bi ...

  2. POJ 3463 最(次)短路条数

    Sightseeing Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9497   Accepted: 3340 Descr ...

  3. 从概念到业务来看 To B 和 To C 产品区别在哪?

    自从互联网火了以后,一大堆 o2o,b2b,c2c 的产品出现,这些名词也渐渐为人熟知,但很多人对这些产品的理解也是停留在概念上,实际上绝大部分人用的都是 To C(也写作2c)产品,比如微信,qq ...

  4. 【Alpha】——Third Scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 基本完成添加功能 继续完善添加功能 郑靖涛 基本完成删除功能 继续完善删除功能 杨海亮 基本完成查找功能 ...

  5. 201521123069 《Java程序设计》 第5周学习总结

    1. 本章学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 参考资料: 百度脑图 XMind 1.1 1.2 (1)用Arrays.sort ...

  6. 201521123111《Java程序设计》第2周学习总结

    1. 本章学习总结 这个星期感觉有点醉,整个人都有点迷茫,仿佛突然失去了方向,连java也难以平复所带来的焦躁的情绪.再加上认为周四早上是没有课的,所以忘记去上了.最近总感觉像咸鱼一样,无所事事,想打 ...

  7. 201521123073 《Java程序设计》第1周学习总结

    1.本章学习总结 你对于本章知识的学习总结 1.Java中使用Scanner处理输入,需要注意如下几个地方 程序开头必须import java.util.Scanner导入Scanner类. 使用Sc ...

  8. Android中显示和隐式Intent的使用

    显示启动activity                                                                                         ...

  9. 201521123062《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现 ...

  10. pyhton之路---面向对象

    一.面向过程VS面向对象 面向过程:      优点:极大的降低了写程序的复杂度,只需要顺着执行的步骤,堆叠代码即可.      缺点:一套流水线或者流程就是来解决一个问题,代码就是牵一发而动全身 面 ...