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

2024-06-09 14:52:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望一个空列表将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,这应该是真的。我对这件事的理解中遗漏了什么?你知道吗


Tags: 对象文档orgtestfalsetruehttp示例
3条回答

如果要直接比较,需要使用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

你应该检查一下

In [1]: w = []

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

当您这样做时:

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

相关问题 更多 >