详解Python 中的短路评估

 更新时间:2023年06月09日 09:35:48   作者:迹忆客  
短路是指当表达式的真值已经确定时终止布尔运算,Python 解释器以从左到右的方式计算表达式,这篇文章主要介绍了Python 中的短路评估,需要的朋友可以参考下

本文是关于使用逻辑运算符在 Python 中显示短路行为。

Python 中的逻辑运算符

or (或)运算符

OR:两个操作数均使用 Python or 运算符求值。 如果任一操作数为 True,则 or 运算符返回 True。

但是,仅当所有给定表达式或操作数都返回 False 时,or 运算符才会返回 False。

OR运算符逻辑表:

第一值第二值输出
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse

上述 OR 运算符在 Python 控制台中的表示:

>>> True or True
True
>>> True or False
True
>>> False or True
True
>>> False or False
False

Python 还允许我们使用 OR 运算符比较多个表达式。

>>> (5 < 10) or (8 < 5)
True
>>> (5 < 10) or (8 < 5) or (2 == 2) or (9 != 8)
True

AND 运算符

AND:当使用 Python and 运算符时,两个操作数都会被求值,如果任何给定的表达式或运算符不为真,则返回 False。 and 运算符仅在给定表达式或操作数都为 True 时才返回 True。

AND运算符逻辑表:

第一值第二值输出
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse

上述 AND 运算符在 Python 控制台中的表示:

>>> True and True
True
>>> True and False
False
>>> False and True
False
>>> False and False
False

使用 AND 运算符比较多个表达式。

>>> (5 < 10) and (8 < 5)
False
>>> (5 < 10) and (8 < 5) and (2 == 2) and (9 != 8)
False
>>> (10 == 10) and (8 != 5) and (2 == 2) and (9 != 8)
True

什么是短路

短路是指当表达式的真值已经确定时终止布尔运算。 Python 解释器以从左到右的方式计算表达式。

Python 的大量布尔运算符和函数允许短路。

def exp(n):
	print("Hello")
	return n

为了了解短路是如何发生的,我们将使用上述函数作为操作数或表达式之一,当 Python 解释器执行它时,它将打印单词“Hello”。

在 Python 中使用 AND 运算符进行短路

使用 and 运算符:

>>> True and exp(1)
Hello
1

Python 解释器在上面的代码中从左到右评估代码。 根据 AND 运算符的逻辑表,表达式必须为 True 才能得到 True 布尔值。

Python 解释器评估我们的函数只是因为第一个值设置为 True。

如果我们将初始值设置为 False 会怎样? 观察下面的代码:

>>> False and exp(1)
False

由于初始值设置为 False,Python 解释器会忽略后面的表达式,从而节省执行时间。

交换表达式:

>>> exp(1) and True
Hello
True
>>> exp(1) and False
Hello
False

在这些代码中,我们的初始表达式是我们之前创建的函数。 Python 解释器首先评估给定的函数,导致输出“Hello”。

在 Python 中使用 OR 运算符进行短路

使用或运算符:

>>> True or exp(1)
True

从左到右评估代码。 将初始值设置为 True 可以让 Python 解释器忽略后面表达式的执行,也就是给定的函数。

因此,根据 OR 运算符的给定逻辑表,输出为 True。

>>> False or exp(1)
Hello
1

Python 解释器执行上面代码中的函数,因为前一个值设置为 False。

交换表达式:

>>> exp(1) or True
Hello
1
>>> exp(1) or False
Hello
1

当我们交换表达式时,我们创建的函数每次都会执行,因为它是 Python 解释器评估的第一个操作数。

考虑以上任一代码示例,or 运算符将返回 True 布尔值。

但是,如果我们使用 or 运算符得到一个 False 布尔值,我们可以稍微调整创建的函数。

def exp():
	print("Hello")
	return False
>>> exp()
Hello
False

经过以上改动后,每当我们调用 exp() 函数时,它只会在向控制台打印 Hello 后返回 False 布尔值。

>>> exp() or True
Hello
True
>>> exp() or False
Hello
False

由于该函数在每次调用时只返回一个 False 布尔值,Python 解释器必须评估后一个表达式或操作数。

到此这篇关于Python 中的短路评估的文章就介绍到这了,更多相关Python短路评估内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Flask请求钩子与上下文及异常处理分项精解

    Flask请求钩子与上下文及异常处理分项精解

    这篇文章主要介绍了Flask请求钩子与上下文及异常处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • 解决Django模板无法使用perms变量问题的方法

    解决Django模板无法使用perms变量问题的方法

    这篇文章主要给大家介绍了关于解决Django模板无法使用perms变量问题的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • python读写excel数据--pandas详解

    python读写excel数据--pandas详解

    这篇文章主要为大家详细介绍了python操作EXCEL读数据、写数据的实例源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Python单元测试与测试用例简析

    Python单元测试与测试用例简析

    这篇文章主要介绍了Python单元测试与测试用例,结合简单实例形式分析了Python单元测试相关的原理、步骤与相关注意事项,需要的朋友可以参考下
    2019-11-11
  • 最新版Anaconda安装教程

    最新版Anaconda安装教程

    本文主要介绍了最新版Anaconda安装教程,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Python 去除字符串中指定字符串

    Python 去除字符串中指定字符串

    这篇文章主要介绍了Python 去除字符串中指定字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Python实现两个list对应元素相减操作示例

    Python实现两个list对应元素相减操作示例

    这篇文章主要介绍了Python实现两个list对应元素相减操作,结合具体实例形式分析了list对应元素操作的简单实现技巧,需要的朋友可以参考下
    2017-06-06
  • 关于Series的index的方法和属性使用说明

    关于Series的index的方法和属性使用说明

    这篇文章主要介绍了关于Series的index的方法和属性使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Python实现网页文件转PDF文件和PNG图片的示例代码

    Python实现网页文件转PDF文件和PNG图片的示例代码

    这篇文章主要介绍了如何利用Python分别实现网页文件转为PDF文件和网页文件转PNG图片的示例代码,文中的代码简洁易懂,感兴趣的可以动手试试
    2022-01-01
  • Python实现对百度云的文件上传(实例讲解)

    Python实现对百度云的文件上传(实例讲解)

    下面小编就为大家带来一篇Python实现对百度云的文件上传(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10

最新评论