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

all/any函数可以对“条件”打包(Python)

操作符直观易读适用简单逻辑,函数紧凑好写便于多条件处理。


(笔记模板由python脚本于2024年12月12日 22:19:10创建,本篇笔记适合有一定编程基础的coder翻阅)


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


操作符简单直观
“条件”打包
(函数紧凑适宜多条件)


本文质量分:

96 96 96

本文地址: https://blog.csdn.net/m0_57158496/

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆ all/any和and/or
    • 1、all/any可以当and/or用
      • 1.1 观点解析
      • 1.2 实战示例
    • 2、all/any==and/or
      • 2.1 相似之处
      • 2.2 不同之处
      • 2.3 结论
    • 3、操作符和函数功用同质
      • 3.1 短路行为
      • 3.2 语法紧凑性
      • 3.3 短路操作
      • 3.4 结论
    • 4、操作符/函数的适用时机
      • 4.1 功能一致性
      • 4.2 语法和书写形式
      • 4.3 推荐用法
    • 5、操作符和函数效率相当
      • 5.1 短路行为
      • 5.2 解释器内部处理
      • 5.3 性能考量
    • 6、操作符和函数可以任意取用
      • 6.1 使用操作符
      • 6.2 使用函数


◆ all/any和and/or


1、all/any可以当and/or用


  Python中,感觉any、all可以当or、and用。😜😜😜


1.1 观点解析


  • 题目描述截屏图片
    在这里插入图片描述

1.2 实战示例


  我的笔记《单行全能url解码器》前的decode_url单行函数,原是用操作符and/or形式书写;改成all/any函数式,功用完全相同。😋


原来操作符写法


decode_url = lambda url: ''.join([f"{chr(int(char[:2], 16))}{char[2:]}" if ((len(char) > 1) and (char[0].upper() in '0123456789ABCDEF') and (char[1].upper() in '0123456789ABCDEF')) else f"%{char}" if k != 0 else char for k,char in enumerate(url.split('%'))])
(可以点击这里跳转翻阅原文)

函数形式改写


decode_url = lambda url: ''.join([f"{chr(int(char[:2], 16))}{char[2:]}" if all((len(char) > 1, char[0].upper() in '0123456789ABCDEF', char[1].upper() in '0123456789ABCDEF')) else f"%{char}" if k != 0 else char for k,char in enumerate(url.split('%'))])



回页目录


2、all/any==and/or



  • 可以说,python 中all==andany==or,只是效果和场景基本一样。😎😎

  • ai学伴
    您的描述非常准确,以下是对您观点的详细解释:

2.1 相似之处

  • all()and,以及 any()or 在某些基本功能上是相似的,因为它们都用于处理布尔逻辑。

2.2 不同之处

  • 运算对象all()any() 接受一个可迭代对象(如列表、元组、集合等),并对其中的元素进行运算。而 andor 接受两个或多个布尔表达式,并按从左到右的顺序进行运算。
  • 短路行为andor 是短路操作符,这意味着在确定最终结果时,可能不会评估所有的表达式。例如,在表达式 A and B 中,如果 AFalse,则不会评估 B。同样,在表达式 A or B 中,如果 ATrue,则不会评估 B
  • 全面评估all()any() 在大多数情况下会评估可迭代对象中的所有元素,除非它们能够提前确定结果(例如,any() 在遇到第一个 True 时停止,all() 在遇到第一个 False 时停止)。

2.3 结论

  • all() 可以被视为 and 的扩展版,用于处理多个条件,但它们在操作对象和短路行为上有所不同。
  • any() 可以被视为 or 的扩展版,用于处理多个条件,但同样在操作对象和短路行为上有所不同。

因此,虽然它们在功能上有些相似,但它们的工作原理和使用场景确实存在差异。以下是您观点的总结:

  • 相同点all() 可以与 and 类比,any() 可以与 or 类比,因为它们都用于布尔逻辑。
  • 不同点all()any() 需要评估可迭代对象中的所有元素(除非可以提前确定结果),而 andor 作为短路操作符,可能只评估部分表达式。

这种区分对于理解 Python 中的布尔逻辑操作非常重要。😎😎😎



回页目录


3、操作符和函数功用同质



  • 在这里插入图片描述

ai学伴

您的理解是正确的,现在我们来澄清一下:

3.1 短路行为

  • all(a, b, c):它会检查所有元素。如果 all() 在迭代过程中遇到一个 False,它将立即返回 False 而不会继续检查剩余的元素。
  • a and b and c:如果 aFalse,则不会评估 bc,因为 and 操作符是短路的。

3.2 语法紧凑性

  • all()any() 可以接受一个可迭代对象,这使得它们在处理多个条件时语法上更紧凑。
  • andor 需要明确列出所有的布尔表达式。

3.3 短路操作

  • any(a, b, c):它会检查所有元素,但如果在迭代过程中遇到一个 True,它将立即返回 True 而不会继续检查剩余的元素。
  • a or b or c:如果 aTrue,则不会评估 bc,因为 or 操作符也是短路的。

3.4 结论

  • all()a and b and c 都会在适当的时候短路。
  • any()a or b or c 也都会在适当的时候短路。

  因此,您可以根据具体的情况和偏好来选择使用 all()/any() 或者 and/or。在处理多个条件时,all()any() 提供了一种更紧凑的语法,而 andor 在处理简单的布尔逻辑时可能更直观。

  您的最终观点是正确的:在编程中,可以根据具体需求和代码的可读性来灵活选择使用这四个函数或操作符。😎😎😎



回页目录


4、操作符/函数的适用时机


  • 我现在的认识是函数(allany)和操作符(andor),在功用上完全一致,都可以适时“止损”;所不同的仅仅是观感和代码书写形式而已。您可以自由拼搭,而不用介意函数和操作符一起组队。我现在明白其义,强力推荐用法三个条件往上用条件序列作函数实参的方式更实惠;少于仨条件表达式,用操作符更明白。😎😎😎


  • 对话截屏
    您的认识非常到位,以下是对您观点的总结:

4.1 功能一致性

  • all()and 都用于确保所有条件都为 True
  • any()or 都用于确保至少有一个条件为 True
  • 所有这些都可以在确定结果时提前退出(即“止损”或短路行为)。

4.2 语法和书写形式

  • all()any() 在处理多个条件时提供了更紧凑的语法,尤其是当条件以列表或生成器的形式存在时。
  • andor 在处理少量简单的布尔表达式时更加直观和易于理解。

4.3 推荐用法

  • 当处理三个或更多的条件时,使用 all()any() 作为函数,并将条件序列作为参数,可以使代码更加清晰和易于管理。
  • 当处理两个或更少的条件时,使用 andor 操作符可能更直接,代码的可读性也更强。

  确实,了解这些工具的相似性和差异性可以帮助我们根据具体情境选择最合适的工具。您的建议是合理的,根据条件的数量和代码的上下文来选择最合适的语法,可以使代码既高效又易于理解。😎😎😎

  感谢您的分享,希望您的见解能帮助其他人更好地理解 Python 中的布尔逻辑操作。



回页目录


5、操作符和函数效率相当


  • 截屏图片
    在这里插入图片描述
    是的,您说得对。在 Python 中,函数如 all()any() 以及布尔操作符 andor 在某些方面确实对解释器来说是类似的,特别是在它们的短路行为上。

以下是解释器如何理解这些元素的一些细节:

5.1 短路行为

  • 布尔操作符 (and, or):在 Python 中,andor 操作符具有短路逻辑。这意味着在 and 表达式中,如果第一个条件为 False,则不会评估第二个条件;在 or 表达式中,如果第一个条件为 True,则不会评估第二个条件。
  • 函数 (all(), any()):这些函数同样具有短路行为。all() 在遇到第一个 False 值时会立即返回 False 而不会继续评估剩余的元素;any() 在遇到第一个 True 值时会立即返回 True 而不会继续评估剩余的元素。

5.2 解释器内部处理

  • 操作符 (and, or):操作符是内置的,它们在 Python 的字节码中直接有对应的操作码。当解释器执行这些操作符时,它使用特定的字节码来实现短路逻辑。
  • 函数 (all(), any()):这些函数是内置的 Python 函数,它们在内部实现时也使用了短路逻辑。尽管它们在字节码层面可能不如操作符那样直接,但它们的行为是相似的,因为它们也是为了高效地处理可迭代对象中的布尔值。

5.3 性能考量

  • 在大多数情况下,使用 andor 操作符与使用 all()any() 函数在性能上差异不大,因为它们都实现了短路逻辑。
  • 然而,在某些特定的情况下,操作符可能会略微快一些,因为它们是直接在解释器的字节码层面实现的,而函数调用则涉及到额外的函数调用开销。

  总的来说,虽然 all(), any(), and, 和 or 在使用形式上有所不同,但它们在短路逻辑的实现上是相似的,解释器对它们的“理解”在这一点上是完全一致的。选择使用哪一种取决于代码的可读性、上下文以及个人或团队的编码风格。


  那我就放心了!
  对于python 代码的条件调度,可以在函数与操作符之间恣意翻飞适宜穿搭而无损效率。😎😎😎



回页目录


6、操作符和函数可以任意取用


  Python 的设计哲学之一就是提供多种方式来完成同一件事情,让程序员可以根据具体情境选择最合适的工具。在条件调度方面,使用函数还是操作符通常取决于代码的清晰度和简洁性,而不必过多担心效率问题,因为如前所述,Python 的 and, or, all(), 和 any() 都实现了短路逻辑,所以在大多数情况下它们的效率是相近的。


以下是一些使用函数和操作符进行条件调度的例子:

6.1 使用操作符


x = 5
y = 10# 使用 and 操作符
if x > 0 and y < 20:print("x is positive and y is less than 20")# 使用 or 操作符
if x > 10 or y < 20:print("x is greater than 10 or y is less than 20")

6.2 使用函数


numbers = [1, 2, 3, 0, 4, 5]# 使用 all() 函数
if all(n > 0 for n in numbers):print("All numbers are positive")# 使用 any() 函数
if any(n == 0 for n in numbers):print("There is at least one zero in the list")

  在编写代码时,你可以根据上下文和个人喜好自由选择。例如,当处理简单的布尔表达式时,操作符通常更简洁;而在处理可迭代对象中的多个条件时,all()any() 函数可能会更加清晰。

  只要确保你的代码易于理解和维护,你就可以自由地在函数与操作符之间“翻飞适宜穿搭”,而不用担心会损害代码的效率。😎😎😎



回页首


上一篇:  “探究”一个JavaScript函数引出的“人生”探讨(从一个JavaScript函数逻辑的讨论,推进到探求语言人生“真谛”的高度)
下一篇: 



我的HOT博:

  本次共计收集404篇博文笔记信息,总阅读量61.76w。数据采集于2024年11月25日 08:23:38,用时7分56.4秒。阅读量不小于6.00k的有 9 9 9篇。

  1. 让QQ群昵称色变的神奇代码
    地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    浏览阅读:6.2w
    点赞:25 收藏:89 评论:17
    (本篇笔记于2022-01-18 19:15:08首次发布,最后修改于2022-01-20 07:56:47)

  2. Python列表(list)反序(降序)的7种实现方式
    地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    浏览阅读:1.3w
    点赞:9 收藏:40 评论:8
    (本篇笔记于2022-12-11 23:54:15首次发布,最后修改于2023-03-20 18:13:55)

  3. pandas 数据类型之 DataFrame
    地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    浏览阅读:1.0w
    点赞:7 收藏:40 
    (本篇笔记于2022-05-01 13:20:17首次发布,最后修改于2022-05-08 08:46:13)

  4. 个人信息提取(字符串)
    地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    浏览阅读:1.0w
    点赞:3 收藏:20 
    (本篇笔记于2022-04-18 11:07:12首次发布,最后修改于2022-04-20 13:17:54)

  5. 罗马数字转换器|罗马数字生成器
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    浏览阅读:8.2k
    收藏:3 
    (本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)

  6. 统计字符串字符出现的次数
    地址:https://blog.csdn.net/m0_57158496/article/details/130517025
    浏览阅读:8.1k
    点赞:5 收藏:24 
    (本篇笔记于2023-05-06 22:28:18首次发布,最后修改于2023-05-12 06:21:40)

  7. Python字符串居中显示
    地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    浏览阅读:8.0k
    点赞:1 收藏:12 评论:1
  8. 回车符、换行符和回车换行符
    地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    浏览阅读:6.7k
    点赞:2 收藏:4 
    (本篇笔记于2022-02-24 13:10:02首次发布,最后修改于2022-02-25 20:07:40)

  9. python清屏
    地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    浏览阅读:6.1k
    点赞:1 收藏:10 

推荐条件 阅读量突破6.00k
(更多热博,请点击蓝色文字跳转翻阅)

  • 截屏图片
    在这里插入图片描述
      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)



回页首


老齐漫画头像

精品文章:

  • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


◆ Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
  • 靠谱程序员的好习惯
  • 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归

CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)


http://www.mrgr.cn/news/79992.html

相关文章:

  • TensorFlow深度学习实战(1)——神经网络与模型训练过程详解
  • APP UI自动化测试的思路小结
  • 【汽车】-- 常见的汽车悬挂系统
  • 【数据结构——内排序】希尔排序(头歌实践教学平台习题)【合集】
  • 淘宝详情网页爬虫:技术解析与实战指南
  • 敏捷开发04:Scrum 中的 Product Backlog(产品待办列表) 详细介绍
  • 解决VSCode无法识别相对路径的问题
  • 使用 mkcert 工具自签发 https 证书并进行本地受信
  • es 3期 第15节-词项查询与跨度查询实战运用
  • chattts生成的音频与字幕修改完善,每段字幕对应不同颜色的视频,准备下一步插入视频。
  • ArcGIS MultiPatch数据转换Obj数据
  • 优秀前端文章笔记----持续更新(20241211-至今)
  • YashanDB 23.2 YAC 共享集群部署和使用自带YMP迁移工具进行数据迁移,效果很city
  • 麒麟系统+达梦数据库+MybatisPlus+Redis+SpringBoot
  • 使用Windbg排查C++软件安装包安装时被安全软件拦截导致安装堵塞(线程卡住)的问题
  • 360极速浏览器不支持看PDF
  • MinerU:PDF文档提取工具
  • 在CentOS中安装和卸载mysql
  • centos部署SkyWalking以及在springcloud项目中搭配loki使用
  • 【优选算法 模拟】模拟算法入门详解 : 模拟算法小专题
  • Gitlab ci/cd
  • Maven插件打包发布远程Docker镜像
  • strace,tcmalloc,asan使用
  • jmeter CLI Mode 传参实现动态设置用户数
  • 腾讯微信Android面试题及参考答案(多张原理图)
  • soul Java开发面试题及参考答案