1

我希望一个空列表将测试值设为 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,它应该是 True。我对此的理解缺少什么?

4

5 回答 5

4

你应该做一个检查

In [1]: w = []

In [2]: if w:
   ...:     print True
   ...: else:
   ...:     print False
   ...:
False
于 2012-11-28T04:13:50.127 回答
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
于 2012-11-28T04:20:50.977 回答
2

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

["hi"] == True 
// False

if ["hi"]:
    print("hello")
// prints hello
于 2012-11-28T04:17:26.927 回答
2

bool()如果要直接比较,则需要使用

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

当您使用ifor测试条件时while,转换为bool隐式完成

>>> if weapon == True:  # weapon isn't equal to True
...     print "True"
... 
>>> if weapon:
...     print "True"
... 
True
于 2012-11-28T04:21:05.203 回答
1

文档说“可以测试任何对象的真值[] == False”而不是['whatever'] == True. 您应该测试文档中指定的对象“用于 if 或 while 条件或作为布尔运算的操作数”

于 2012-11-28T04:21:52.367 回答