我希望一个空列表将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,它应该是真的。我对此的理解中缺少什么?
答案 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
使用if
或while
测试条件时,转换为bool
隐式执行
>>> if weapon == True: # weapon isn't equal to True
... print "True"
...
>>> if weapon:
... print "True"
...
True
答案 4 :(得分:1)
文档说 “任何对象都可以测试真值 ”而不是[] == False
或['whatever'] == True
。您应该按照 “文档中的规定测试对象,以便在if或while条件中使用,或者作为布尔操作的操作数使用 。