初学者往往在条件语句中看到这样的代码:
if value:
print("有值!")
一开始,像 if value:
这样的简单语句 容易让人感到困惑,不清楚它在检测什么。
特别是下面这两个:
None
""
(空字符串)
这两者都被评估为 False
,因此让人感到 似乎是同样的东西。
但真的是这样吗?
Falsy 值
在 Python 中,以下值在条件语句中会被评估为 False:
None
False
0
,0.0
""
(空字符串)[]
(空列表){}
(空字典)set()
,()
等空集合
也就是说,if not value:
包括了所有这些情况。
None
和 ""
是不同的
这两个是不同的,并且表现不同。
value1 = None
value2 = ""
print(value1 == value2) # False
print(value1 is value2) # False
print(bool(value1)) # False
print(bool(value2)) # False
==
是值比较,而is
是 身份(id) 比较。None
是 “还没有值” 的特定对象,""
是 一个字符串,但为空。
从上面的图中可以看到,左侧的男性拿着气泡,却没有说任何话——这对应着空字符串 ""
。
右侧的女性甚至没有气泡——这就是 None
。
这两者在以下条件下都被评估为 False
:
male_voice = ""
female_voice = None
if not male_voice and not female_voice:
print("两者都没有发言!") # 两者都为 False,因此执行
那么在实践中如何区分呢?
例如,考虑处理用户输入的情况:
username = user_input.get("username", None)
- 如果用户未输入 →
None
- 如果用户输入了空字符串 →
""
如果想要对这两种情况进行不同的处理呢?
if username is None:
print("根本没有输入!")
elif username == "":
print("输入了空字符串。")
else:
print("输入的值:", username)
实践中常见的错误
以下代码有时会不小心过滤掉所有 Falsy 值:
if not username:
print("没有输入")
但是这个条件 不仅包含空字符串,还包含 None
、0
、空列表等。
因此需要明确意图:
- 即使是空值也应该允许字符串 →
if username is None:
- 字符串可以为空,但必须存在 →
if username != "":
- 必须什么值都没有 →
if not username:
总结一下
None
和 ""
是不同的。但两者都表现为 False
。
了解这个区别可以使你的代码意图 更加清晰且无错误。
在下一篇文章中,我们将更深入地讨论 0
、[]
、{}
等其他 Falsy 值以及 is
和 ==
的区别!
댓글이 없습니다.