Python 为什么在测试值时包含对象的列表为False?
我希望一个空列表将test值设置为False,但我有点困惑,为什么在如下示例中测试值时,包含对象的列表的引用也会报告为False:Python 为什么在测试值时包含对象的列表为False?,python,object,truthtable,Python,Object,Truthtable,我希望一个空列表将test值设置为False,但我有点困惑,为什么在如下示例中测试值时,包含对象的列表的引用也会报告为False: >>> weapon = [] >>> weapon == True False >>> weapon.append("sword") >>> weapon == True False >>> weapon ['sword'] 如果武器=[]是假的,为什么武器=[‘剑’也是假
>>> weapon = []
>>> weapon == True
False
>>> weapon.append("sword")
>>> weapon == True
False
>>> weapon
['sword']
如果武器=[]是假的,为什么武器=[‘剑’也是假的?根据文件,这应该是真的。我对这一点的理解遗漏了什么?你应该像这样做一次检查
In [1]: w = []
In [2]: if w:
...: print True
...: else:
...: print False
...:
False
你应该做一个像这样的检查
In [1]: w = []
In [2]: if w:
...: print True
...: else:
...: print False
...:
False
从那篇文章中,请注意,即使事物被认为具有真实的真值,它们也不一定是==真的。例如:
["hi"] == True
// False
if ["hi"]:
print("hello")
// prints hello
从那篇文章中,请注意,即使事物被认为具有真实的真值,它们也不一定是==真的。例如:
["hi"] == True
// False
if ["hi"]:
print("hello")
// prints hello
当您这样做时:
w = []
if w:
print "Truthy"
else:
print "Falsy"
需要注意的关键是,在if子句中测试的任何内容都被强制为布尔值。要使其明确:
w = []
if bool(w):
print "Truthy"
else:
print "Falsy"
把苹果和苹果相比较,你就不想把剑和真相比较了。相反,你想将布尔[剑]与真进行比较:
当您这样做时:
w = []
if w:
print "Truthy"
else:
print "Falsy"
需要注意的关键是,在if子句中测试的任何内容都被强制为布尔值。要使其明确:
w = []
if bool(w):
print "Truthy"
else:
print "Falsy"
把苹果和苹果相比较,你就不想把剑和真相比较了。相反,你想将布尔[剑]与真进行比较:
如果要直接比较,需要使用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
如果要直接比较,需要使用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
文件上说,任何物体都可以测试真值,而不是[]==False或['whatever']==True。您应该按照文档中的规定测试对象,以便在if或while条件下使用,或者作为布尔运算的操作数。文档中说,任何对象都可以测试真值,而不是[]==False或['whatever']==True。您应该测试文档中指定的对象,以便在if或while条件下使用,或者作为布尔运算的操作数使用。因为您使用的是==True。但是如果武器=['swarm'],那么武器不应该为True,那么武器==True?武器等于一个对象,而不是无或空字符串。文档说明任何空序列,例如,,[]。被认为是假的。。。因此,非空字符串应该==True。因为您正在使用==True。但是如果武器=['Swarm'],那么武器不应该是True,所以武器==True?武器等于一个对象,而不是无或空字符串。文档说明任何空序列,例如,,[]。被认为是假的。。。因此,非空字符串应该==True。谢谢,这很有帮助。当我使用一个布尔值通过一个定义的函数计算武器时,只要它包含对象,它就计算为真;如果为空,它计算为假。@VinBreau,这是正确的。同样的类型也适用于空字符串、空元组、空dict、空集合等。谢谢,这很有帮助。当我使用一个布尔值通过一个定义的函数计算武器时,只要它包含对象,它就计算为真;如果为空,它计算为假。@VinBreau,这是正确的。同样的类型也适用于空字符串、空元组、空dict、空集合等。