当前位置: 首页 > news >正文

Python 中的短路评估

文章目录

    • Python 中的逻辑运算符
      • or (或)运算符
      • AND 运算符
    • 什么是短路
    • 在 Python 中使用 AND 运算符进行短路
    • 在 Python 中使用 OR 运算符进行短路


本文是关于使用逻辑运算符在 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 中的逻辑运算符or (或)运算符AND 运算符 什么是短路在 Python 中使用 AND 运算符进行短路在 Python 中使用 OR 运算符进行短路 本文是关于使用逻辑运算符在 Python 中显示短路行为。 Python 中的逻辑运算符 or (或)运算符 OR&#xff1a;两个操作数均使用 Py…...

LVGL源码分析(1):lv_ll链表的实现

在LVGL中难免需要用到链表&#xff1a;group中的对象需要用链表来存储&#xff0c;这样可以切换对象的焦点&#xff1b;再比如LVGL内部的定时器&#xff0c;多个定时器也是用链表进行存储的。这篇文章就来分析一下LVGL中链表的源码。 文章目录 1 链表结构体2 插入元素源码分析…...

js判断数据类型的几种方法及其局限性(typeof, instanceof, Object.prototype.toString.call())

​ js中判断了类型的方法有很多, 这篇文章主要来说一下常用的几种判断类型的方法,以及使用: 每个方法都各有优缺点,在日常使用的时候请结合这些优缺点进行斟酌: 1. 使用typeof判断数据类型 javaScript中typeof可以判断以下类型: undefined: 未定义的变量或者值 boolean: 布…...

【MySQL】一文带你掌握聚合查询和联合查询

文章目录 1. 聚合函数1.1 COUNT1.2 SUM1.3 AVG1.4 MAX&#xff0c;MIN 2. GROUP BY3. HAVING4. 联合查询4.1 内连接4.2 外连接4.3 自连接4.4 子连接 5.合并查询5.1 UNION5.2 UNION ALL 1. 聚合函数 概念&#xff1a; 聚合函数是一种用于处理数据集合的函数&#xff0c;它将多个…...

初步了解JVM

JVM 整体组成部分 类加载器 类加载过程 加载&#xff1a;使用IO读取字节码文件&#xff0c;转换并存储&#xff0c;为每个类创建一个Class对象&#xff0c;存储在方法区中 链接&#xff08;验证&#xff0c;准备&#xff0c;解析&#xff09; ​ 验证:对字节码文件格式进…...

嘀嗒陪诊小程序v1.0.8+小程序前端

嘀嗒陪诊小程序功能相对简单&#xff0c;后台也简捷&#xff0c;如果只是做个陪诊服务的小程序也基本能满足了&#xff0c;整体测试了下海参崴发现BUG&#xff0c;小程序端也能正常为使用&#xff0c;唯一用户授权接口是老的。 应用背景&#xff1a;人口老龄化少子化&#xff…...

Java中线程的生命周期

Java中线程的生命周期 Java中线程的声明周期与os中线程的生命周期不太一样&#xff0c;java中线程有6个状态&#xff0c;见下&#xff1a; NEW: 初始状态&#xff0c;线程被创建出来但没有被调用 start() 。RUNNABLE: 运行状态&#xff0c;线程被调用了 start()等待运行的状态…...

光线追踪RayTracing,基本原理,判断物体与光线相交

光线的三点假设&#xff1a; 光线按直线传播光线之间不会发生碰撞光线会经过一系列折射反射进入摄像机 可以从摄像机发出光线&#xff0c;推出可逆的光路 上图中&#xff0c;透明球在与相机直连的线条处&#xff0c;需要将折射和反射的着色点结果相加&#xff0c;如果有光源直…...

三十六、数学知识——组合数(递推法 + 预处理法 + 卢卡斯定理 + 分解质因数求解组合数 + 卡特兰数)

组合数算法主要内容 一、基本思路1、组合数基本概念2、递推法——询问次数多 a b 值较小 模处理&#xff08;%mod&#xff09;3、预处理阶乘方法——询问次数较多 a b 值很大 模处理&#xff08;%mod&#xff09;4、卢卡斯定理——询问次数较少 &#xff08;a b 值很大&am…...

LinuxC编程——高级文件操作

目录 一、查询文件信息1、stat2、stat fstat lstat区别 二、目录操作2.1 opendir2.2 readdir2.3 closedir例练习&#xff1a;实现ls操作 三、库3.1 库的定义3.2 库的分类3.2.1 静态库3.2.2 动态库 3.3 创建库3.3.1 静态库制作3.3.2 动态库制作 一、查询文件信息 1、stat int …...

【基础知识整理】图的基本概念 邻接矩阵 邻接表

一、图概述 定义&#xff1a; 图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的&#xff1b; 其中&#xff0c;点通常被成为"顶点(vertex)“&#xff0c;而点与点之间的连线则被成为"边或弧”(edege)。 通常记为&#xff0c;G(V,E)。 图是一种重要的…...

5.程序控制结构|Java学习笔记

文章目录 程序流程控制介绍顺序控制分支控制分支控制if elseswitch分支结构 循环控制for循环控制while循环控制do...while循环控制跳转控制语句breakcontinuereturn 程序流程控制介绍 顺序控制分支控制循环控制 顺序控制 程序从上到下逐行地执行&#xff0c;中间没有任何判断…...

【最优PID 整定】PID性能指标(ISE,IAE,ITSE和ITAE)优化、稳定性裕量(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Linux内核中断和Linux内核定时器

目录 Linux内核中断 Linux内核定时器 Linux内核中断 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev) 功能&#xff1a;注册中断 参数&#xff1a; irq : 软中断号 gpio的软中断号 软中断号 gpio_to_i…...

OMG--IDL(Interface Definition Language)

OMG--IDL&#xff08;Interface Definition Language&#xff09; 1 概述2 内容缩写IDL 语法和语义概述词法约定ISO Latin-1的字母字符如下表十进制数字字符图形字符格式化字符Tokens注释标识符冲突规则转义标识符关键字IDL识别的其他字符字面量 预处理IDL 语法构建块核心数据类…...

英语学习:M开头

machine 机器 mad 发疯的&#xff0c;生气的 madam 女士&#xff0c;夫人 madame 夫人 magazine 杂志 magic 有魔力的 maid 女仆&#xff0c;侍女 mail 邮递 mailbox 邮箱 mainland 大陆 major 较大的&#xff0c;主要的 majority 大多数 male 雄的 man 人类 man…...

【计算机组成原理与体系结构】控制器

目录 一、CPU的功能与基本结构 二、指令周期的数据流 三、数据通路 四、硬布线控制器 五、微程序控制器 六、微指令 一、CPU的功能与基本结构 运算器基本结构 控制器基本结构 CPU的基本结构 二、指令周期的数据流 取址周期 间址周期 中断周期 指令周期流程 三、数据通路 …...

结构化命令

章节目录&#xff1a; 一、使用 if-then 语句二、if-then-else 语句三、嵌套 if 语句四、test 命令4.1 数值比较4.2 字符串比较4.3 文件比较 五、复合条件测试六、if-then 的高级特性6.1 使用单括号6.2 使用双括号6.3 使用双方括号 七、case 命令八、结束语 本章内容&#xff1…...

Java Web实训项目:西蒙购物网

文章目录 一、创建数据库和表1、创建数据库2、创建用户表3、创建类别表4、创建商品表5、创建订单表 二、创建Simonshop项目1、创建web项目2、修改Artifacts名称&#xff1a;simonshop3、重新部署项目4、编辑首页5、启动应用&#xff0c;查看效果 三、创建实体类1、用户实体类2、…...

ChatGPT Prompt 提示词设计技巧必知必会

本文内容整理自图灵社区直播《朱立成&#xff1a;ChatGPT Prompt提示词技巧必知必会》。 朱立成&#xff0c;图灵社区《ChatGPT即学即用》视频课程作者&#xff0c;软件工程师&#xff0c;对新事物充满好奇&#xff0c;关注ChatGPT应用。2001年毕业于浙江大学&#xff0c;从事软…...

Qwen2.5-72B-GPTQ-Int4保姆级教程:log排查技巧+Chainlit响应延迟优化

Qwen2.5-72B-GPTQ-Int4保姆级教程&#xff1a;log排查技巧Chainlit响应延迟优化 1. 模型简介与部署准备 Qwen2.5-72B-Instruct-GPTQ-Int4是通义千问大模型系列的最新版本&#xff0c;在知识量、编程能力和数学能力方面有显著提升。这个72.7B参数的模型经过GPTQ 4-bit量化&…...

Llama-3.2V-11B-cot镜像免配置:内置模型加载进度条与超时重试机制

Llama-3.2V-11B-cot镜像免配置&#xff1a;内置模型加载进度条与超时重试机制 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具&#xff0c;专为双卡4090环境深度优化。这个工具解决了传统大模型部署中的多个痛点&#xf…...

【Linux信号】Linux进程信号(上):信号产生方式和闹钟

&#x1f3ac; 个人主页&#xff1a;艾莉丝努力练剑❄专栏传送门&#xff1a;《C语言》《数据结构与算法》《C/C干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法&#xff1a;从基础到进阶》《Python干货分享》⭐️为天地立心&#xff0c;为生民立命…...

iMeta入选新锐期刊分区表生物学1区Top

2026年3月24日&#xff0c;2026年新锐期刊分区表正式发布。iMeta被评选为生物学1区Top期刊&#xff0c;标志着iMeta期刊学术声誉与影响力持续提升。自创刊以来&#xff0c;iMeta的每一步成长都离不开期刊编委、审稿专家及广大同行的鼎力支持。未来&#xff0c;iMeta将再接再厉&…...

OpenClaw+百川2-13B:个人知识库自动整理与问答系统搭建

OpenClaw百川2-13B&#xff1a;个人知识库自动整理与问答系统搭建 1. 为什么需要本地化知识管理系统 去年整理博士论文资料时&#xff0c;我遇到了一个典型的研究者困境&#xff1a;电脑里堆积了237个PDF、643篇网页存档和无数零散的笔记片段&#xff0c;但需要引用某个概念时…...

深入解析PLL锁相环在FPGA时钟管理中的核心应用

1. 从闹钟到芯片&#xff1a;PLL如何成为FPGA的"时间管家" 想象一下你早上起床的场景&#xff1a;手机闹钟准时响起&#xff0c;咖啡机开始自动煮咖啡&#xff0c;窗帘缓缓拉开让阳光照进来。这些设备之所以能完美同步&#xff0c;全靠它们内部精确的时钟信号。而在…...

半导体晶圆测量中的5大常见误区:从台阶仪到无图晶圆系统的避坑指南

半导体晶圆测量中的5大常见误区&#xff1a;从台阶仪到无图晶圆系统的避坑指南 在半导体制造领域&#xff0c;晶圆测量是确保器件性能与良率的关键环节。然而&#xff0c;即使是经验丰富的工程师&#xff0c;也常因忽视某些细节而陷入测量陷阱。本文将揭示五个最具隐蔽性的操作…...

遥感影像配准总对不齐?OpenCV+RST+PROJ4三重坐标系对齐实战(附WGS84→UTM→影像本地坐标的转换矩阵速查表)

第一章&#xff1a;Shell脚本的基本语法和命令Shell脚本是Linux/Unix系统自动化任务的核心工具&#xff0c;以可执行文本文件形式存在&#xff0c;由Bash等shell解释器逐行解析运行。其语法简洁但严谨&#xff0c;对空格、分号、引号和换行符敏感&#xff0c;需严格遵循语法规则…...

系统架构设计师知识点21-40

21.ABSD方法的三个基础。①功能分解&#xff0c;使用已有的基于模块的内聚与耦合技术②选择架构风格实现质量和业务需求③软件模板使用22.ABSD方法是一个自顶向下&#xff0c;递归细化的方法&#xff0c;软件系统的体系结构通过该方法得到细化&#xff0c;直到能产生软件构件和…...

图灵奖得主LeCun团队悄然引动世界模型革新!世界模型终于不崩了!48倍加速!15M参数单GPU端到端训练!自发涌现物理理解!

近日&#xff0c;杨立昆与其团队在新发布的论文《LeWorldModel&#xff1a;基于像素的稳定端到端联合嵌入预测架构》中&#xff0c;介绍了一种新的世界模型LeWorldModel(LeWM) &#xff0c;这一模型可以端到端的训练&#xff0c;无需任何技巧&#xff0c;同时拥有15M参数、能在…...