我是Python的新手,我对Python处理空对象的方式感到困惑。
考虑这段代码;
a = {}
if a:
print "a is alive!"
else:
print "a is NOT alive!"
if not a:
print "NOT a!"
else:
print "a!"
if a is None:
print "a is None!"
else:
print "a is NOT None!"
我得到了这段代码的以下输出。
a is NOT alive!
NOT a!
a is NOT None!
我假设{}初始化的对象是有效对象。为什么Python不这样对待它?为什么我得到diff if diff条件的差异输出?
在C ++中,当我说
时 Object obj;
if (obj){
}
如果obj为非NULL(无论是垃圾值还是其他),它将进入IF块
但是当我翻译成python时也是如此。
a = {} #This is a valid object
if a:
# Doesn't work!
为什么呢?我读Python评估{}为False。那是为什么?
答案 0 :(得分:2)
Empy dict / sets / lists等被评估为false。没有它是自己的类型,只有一个可能的值。
https://docs.python.org/2.4/lib/truth.html告诉你什么被评估为真和假
答案 1 :(得分:1)
它是一个有效的python对象,但它是空的,因此被视为False
,列表[]
或数字0
也是如此。你有一个dict,但它不是None
对象。
答案 2 :(得分:1)
我的输出中没有看到任何奇怪的东西。 我们一步一步走:
a
是字典,更具体地说是字典 object ; a
是字典,但它是空的,因此其真值为False
因此:
if
,因为a
是False
,会打印else
语句,这是正确的; if
,因为not a
评估为True
因为a
为False
,所以打印if
部分,这也是正确的。 a
不是None
对象,而是dict
对象,因此也可以拍摄并打印else
部分。< / LI>
答案 3 :(得分:0)
带
a = {}
您正在创建一个字体对象,而不是NoneType 使用
检查对象的类(a)型
会给你:
输入dict
if not a:
如果a已经有任何成员,将返回False,如果a只是空列表
,则返回True