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

Python 为什么在测试值时包含对象的列表为False?,python,object,truthtable,Python,Object,Truthtable,我希望一个空列表将test值设置为False,但我有点困惑,为什么在如下示例中测试值时,包含对象的列表的引用也会报告为False: >>> weapon = [] >>> weapon == True False >>> weapon.append("sword") >>> weapon == True False >>> weapon ['sword'] 如果武器=[]是假的,为什么武器=[‘剑’也是假

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

>>> 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、空集合等。