Python的秘密生活:Truthiness 与 Falsy Values

发布: (2026年2月16日 GMT+8 10:50)
4 分钟阅读
原文: Dev.to

Source: Dev.to

对象的本质

Margaret 把茶放下。“Python 没在撒谎,Timothy。它只是非常…哲学。对 Python 来说,if 语句不仅仅是检查变量是否存在,而是检查变量是否具有真值。”

真值? Timothy 问道。“这是技术术语吗?”

“在 Python 中,它绝对是,” Margaret 微笑道。“这个语言里的每个对象都内置了‘真’或‘假’。把 if 语句想象成俱乐部的门卫。他不只是检查你有没有名字,而是检查你是否带了东西来参加派对。如果你空手而来,你就是 Falsy。”

“Falsy” 名人堂

你可以使用 bool() 函数测试任意对象的真值:

bool(0)      # False
bool(0.0)    # False
bool("")     # False
bool([])     # False
bool(())     # False
bool({})     # False
bool(None)   # False

如果这些值出现在 if 语句中,它们的行为就像 False

注意: Falsy 值并不等同于布尔值 False
0 == False 的结果是 True,因为它们共享同一个值,但 0 is FalseFalse,因为它们是不同的对象。

谎言零

Timothy 试着把分数改成字符串:

score = "0"

if score:
    print(f"Current Score: {score}")
else:
    print("Welcome! Please play a match to see your score.")

输出

Current Score: 0

非空字符串,即使是 "0",也是 truthy。即使是只包含一个空格的字符串——bool(" ")——也是 truthy。

身份 vs. 实质

如果想在不让“门卫”拒绝的情况下检查分数是否为零,应当检查身份而不是真值:

score = 0

# 不要写 'if score'(真值检查)
# 写 'if score is not None'(身份检查)
if score is not None:
    print(f"Current Score: {score}")
else:
    print("Welcome! Please play a match.")

输出

Current Score: 0

使用 is not None 是在询问 Python 变量是否指向内存中的实际对象,而不管该对象是 0False 还是空集合。

Margaret 的速查表:说谎的真相

  • 真值检测器: bool(x) – 查看 Python 如何评估对象的真值。
  • 快捷方式(if x:): 当你只关心集合是否有元素或字符串是否有字符时使用。
  • 专业守卫(if x is not None:):0False 或空容器是有效数据且不想被跳过时使用。
  • 字符串陷阱: "0""False"" " 都是 truthy,因为它们不是空的。

在下一集,Margaret 和 Timothy 将面对 “复制猫”——Timothy 将了解到,有时复制某物会产生一个仍然缠绕原对象的幽灵。

0 浏览
Back to Blog

相关文章

阅读更多 »

在 Python 中使用 Zig 函数

概述 本文档展示了如何在 Zig 中编写一个小型 HTTP 客户端,将其暴露给 C,然后从 Python 调用它。重点在于:使用 Zig 的 :0const u8 nul…