在测试值时,为什么包含对象的列表为False?

时间:2012-11-28 04:11:50

标签: python object truthtable

我希望一个空列表将test测试值设为False,但我有点困惑为什么包含对象的列表的引用在下面的示例中进行值测试时报告为False:

>>> weapon = []
>>> weapon == True
False
>>> weapon.append("sword")
>>> weapon == True
False
>>> weapon
['sword']

如果weapon = []为假,为什么weapon = ['sword']也会为假?根据文档http://docs.python.org/release/2.4.4/lib/truth.html,它应该是真的。我对此的理解中缺少什么?

5 个答案:

答案 0 :(得分:4)

你应该像

一样进行检查
In [1]: w = []

In [2]: if w:
   ...:     print True
   ...: else:
   ...:     print False
   ...:
False

答案 1 :(得分:3)

当你这样做时:

w = []
if w:
    print "Truthy"
else:
    print "Falsy"

要注意的关键是,无论你在if子句中测试什么都被强制转换为布尔值。说清楚:

w = []
if bool(w):
    print "Truthy"
else:
    print "Falsy"

要比较苹果和苹果,您不希望将["sword"]True进行比较。相反,您想要将bool(["sword"])True进行比较:

bool(["sword"]) == True
# True

答案 2 :(得分:2)

从那篇文章中可以看出,即使事物被认为具有“真实”的真值,它们也不一定是== True。例如:

["hi"] == True 
// False

if ["hi"]:
    print("hello")
// prints hello

答案 3 :(得分:2)

如果您想直接比较

,则需要使用bool()
>>> weapon = []
>>> bool(weapon) == True
False
>>> weapon.append("sword")
>>> bool(weapon) == True
True

使用ifwhile测试条件时,转换为bool隐式执行

>>> if weapon == True:  # weapon isn't equal to True
...     print "True"
... 
>>> if weapon:
...     print "True"
... 
True

答案 4 :(得分:1)

文档说 “任何对象都可以测试真值 ”而不是[] == False['whatever'] == True。您应该按照 “文档中的规定测试对象,以便在if或while条件中使用,或者作为布尔操作的操作数使用