page contents

解释一下Python中的逻辑运算符。

那天晚上我在公司楼下抽烟,结果有人在群里问我一个特别初级的问题——“Python里的逻辑运算符到底是咋用的?”我一听差点笑喷,毕竟咱写代码这么多年,这玩意儿天天用,但真要让你把它从头到尾捋一遍,还挺考验功底的。反正闲着也是闲着,我就跟他们扯了一大堆,今天正好整理一下写下来。

attachments-2025-10-8WaSRoj468f6e383d6fa7.png那天晚上我在公司楼下抽烟,结果有人在群里问我一个特别初级的问题——“Python里的逻辑运算符到底是咋用的?”我一听差点笑喷,毕竟咱写代码这么多年,这玩意儿天天用,但真要让你把它从头到尾捋一遍,还挺考验功底的。反正闲着也是闲着,我就跟他们扯了一大堆,今天正好整理一下写下来。

逻辑运算符到底是啥

说白了,逻辑运算符就是用来处理布尔值(True 和 False)的。你写代码的时候经常需要判断某个条件成立不成立,这时候就得靠它们了。Python 里主要有三个:andornot。别看只有仨,组合起来能玩出花。

举个例子,你要判断一个人是不是成年人,还得看看他是不是学生。那你可以这样写:

age = 20
is_student = True

if age >= 18 and is_student:
    print("成年学生")

这里的 and 就是逻辑与,意思是两个条件都得满足才行。

and:两个条件都要真

我前几天给小李看一个项目,他写了一堆 if 判断,结果逻辑全乱套了。我说你就记住一点,and 就像门禁刷卡一样,两个卡都得过,门才开。

a = True
b = False
print(a and b)  # False

因为 b 是 False,所以结果就是 False。Python 里还有个小细节,and 会返回第一个为假的值,而不是固定给你 True 或 False:

print(0 and 5)   # 0
print(5 and 0)   # 0
print(5 and 10)  # 10

这点特别容易踩坑,比如有时候你拿 and 来写简洁代码,结果被返回值坑惨了。

or:只要一个条件成立

周末我去超市买东西,想着要么买牛奶,要么买咖啡,至少得带一样回家。这就是 or 的逻辑,任意一个条件满足就行。

a = True
b = False
print(a or b)  # True

注意,or 会返回第一个为真的值:

print(0 or 5)   # 5
print(5 or 0)   # 5
print("" or "hello")  # hello

这个特性特别适合写默认值,比如你从用户输入里取数据,可能为空,就可以这么写:

user_input = ""
name = user_input or "匿名用户"
print(name)  # 匿名用户

是不是很爽?

not:取反操作

not 就是个翻转开关,True 变 False,False 变 True。就像昨晚加班,本来挺高兴项目上线了,结果测试一跑发现有 bug,心情瞬间取反。

a = True
print(not a)  # False

有时候你会看到人家写条件判断特别怪,比如:

if not items:
    print("列表是空的")

因为空列表在布尔上下文里就是 False,加个 not 就变成 True 了。

短路求值:省事但容易出坑

这点特别重要。Python 的逻辑运算符有个特性叫“短路求值”。意思是如果第一个条件已经能决定结果了,就不会去算第二个。

举个例子:

def f():
    print("执行了f()")
    return True

print(False and f())  # 不会打印"执行了f()"
print(True or f())    # 也不会打印

你看,and 前面 False,就直接返回 False 了,根本不执行 f()or 也是,前面 True 就直接过了。这种写法一方面提高效率,但要是你没意识到,可能调试的时候一脸懵逼。

布尔上下文:啥都能真假

Python 比较有意思的一点是,很多东西都能当布尔值用。比如数字 0、空字符串、空列表,这些都算 False,其它基本都算 True。

print(bool(0))       # False
print(bool(123))     # True
print(bool(""))      # False
print(bool("hi"))    # True

所以你经常能看到有人写:

if my_list:
    print("有数据")

这就是利用了逻辑运算符加布尔上下文的特性。

实际应用场景

昨晚我在写个小脚本,需要判断一个文件是不是存在,同时它大小大于 0:

import os

file_path = "test.txt"
if os.path.exists(file_path) and os.path.getsize(file_path) > 0:
    print("文件可用")

再比如接口请求,有时候你要判断返回值里某个字段存在,就可以写成:

data = {"user": {"name""Tom"}}
name = data.get("user"and data["user"].get("name")
print(name)  # Tom

这里用了 and 来避免空字典时报错。

其实逻辑运算符这玩意儿很简单,但要用得舒服,就得多理解它的返回值规则和短路逻辑。and 找第一个假的,or 找第一个真的,not 翻转一下。别小看这三兄弟,代码里到处都有它们的影子。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2025-10-21 09:36
  • 阅读 ( 27 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1479 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 1479 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章