首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python逻辑运算的那些坑,一个都没踩过,说明你代码写得还不够多

Python逻辑运算的那些坑,一个都没踩过,说明你代码写得还不够多

作者头像
Crossin先生
发布2026-03-11 17:58:21
发布2026-03-11 17:58:21
370
举报

大家好,欢迎来到 Crossin 的编程教室。

Python 的逻辑运算(and、or、not)乍一看并没有特别复杂,但实际上藏了不少“陷阱”。很多初学者写着写着就踩坑了,然后一脸懵:代码明明看起来没问题啊?

今天我们就来盘点 6 个容易让新手掉坑里的逻辑运算实例,看完有没有你踩过的,

1. 运算结果不是 bool 值

代码语言:javascript
复制
print("hello" and "world")
print(0 or 100)

有人以为:既然是逻辑运算,那结果应该是 bool 值 True / True

实际运行:world / 100

Python 的 and/or 不是简单返回布尔值,而是返回最后一个“决定命运”的那个值。

and:左边为“真” → 继续看右边,返回右边;左边为“假” → 直接返回左边

or:左边为“真” → 直接返回左边;左边为“假” → 返回右边

这也是为什么很多人用 name = input() or "匿名" 这样的写法来设置默认值。

2. and 和 or 优先级不同

代码语言:javascript
复制
print(2 or 1 and 0)

有人以为:2 or 1 → 2,再 2 and 0 → 0,所以 0

实际运行:2

and 的优先级高于 or(跟乘法高于加法一样)。

所以上面等价于:2 or (1 and 0) → 2 or 0 → 2

3. 链式比较的错觉

代码语言:javascript
复制
print(1 < 2 is True)

有人以为:True

实际运行:False

Python 的链式比较是 and 的变种写法:

a < b is True 等价于 (a < b) and (b is True)

而 2 is True 是 False(因为 2 不是 True 这个对象),1 < False 为 False。

很多人在写单元测试时踩过这个坑。

4. all([]) 的含义

代码语言:javascript
复制
print(all([]))
print(any([]))

有人以为:False / False

实际运行:True / False

all():没有遇到 False,就认为是 True(一个假的都没有为 True)

any():没有遇到 True,就认为是 False(一个真的都没有为 False)

数学上来说:空集上的全称量词为真。

在编程中,检查列表里是否“全部满足条件”时,空列表惯例被认定为通过。

5. 短路求值跳过代码

代码语言:javascript
复制
def check():
    print("我在执行!")
    return True
print(False and check())

有人以为:输出“我在执行!”

实际运行:只输出了 False

and/or 是短路求值的:

and 左边为假 → 右边不执行

or 左边为真 → 右边不执行

这是一种性能优化。其经典用法比如:

代码语言:javascript
复制
user and user.send_email()  # user为空就不调用,不会报错

6. True 和 False 当数字用

代码语言:javascript
复制
print(True + 5)
scores = [True, False, True]
print(sum(scores))

有人以为:Error!bool 和 int 相加,类型不匹配

实际运行:6 / 2

在 Python 里,True 和 False 是 int 的子类:

True == 1、False == 0 都成立,而且可以直接参与 + - * / 等运算。

所以要统计列表中有多少个值大于60,就可以这么写:

代码语言:javascript
复制
count = sum(x > 60 for x in lst)

总结

上面列出的这些,都是 Python 逻辑运算时非常常见的问题,想必你在写代码的过程中一定遇到过。

踩坑不要紧,但要理解为什么会踩,知其然更知其所以然,下次就不会再出现同样的错误,代码能力也就随之提高了。

否则,只关注程序的结果,代码跑通就万事大吉,而忽略其中的逻辑,那不管是自己写的代码,还是AI生成的代码,都可能暗藏了未知的隐患。

你还遇到过什么反直觉的程序结果?欢迎在留言区分享。

如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~

感谢转发点赞的各位~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档