初学者在条件语句中常常会看到这样的代码:
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)
在实际工作中常见的错误
下面的代码有时会意外地过滤掉所有假值:
if not username:
print("没有输入")
但是此条件不仅包含空字符串,还包括 None
、0
、空列表等。
因此需要明确意图:
- 即使是空值,只要是字符串就应该允许 →
if username is None:
- 字符串虽然为空,但必须存在 →
if username != "":
- 应该完全没有任何值 →
if not username:
总结
None
和 ""
是不同的,但它们都会如同 False
一样表现。
了解这个差异可以让你的代码意图变得 更加清晰,减少错误。
在下一篇文章中,我们将深入探讨 0
、[]
、{}
等其他假值,以及 is
和 ==
的区别!
目前沒有評論。