Python值测试'abc'== True返回False

Jam*_*Lin 2 python evaluation

我正在写一个单元测试断言返回值不是空的,所以我写了类似的东西assert(value, True),我得到了一个错误AssertionError: '72a7090610eb11e398d40050569e0016' != True

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 'abc' == True
False
Run Code Online (Sandbox Code Playgroud)

我一直认为非空字符串或> 1整数将评估为True,也许我对PHP感到困惑.

我一直认为if 'abc'相当于if 'abc' == True显然我错了:(

Ósc*_*pez 7

'abc'不等于True,但它是真的.这是两个不同的概念!换句话说,这不会打印'ok':

if 'abc' == True:
    print 'ok'
Run Code Online (Sandbox Code Playgroud)

......但这会:

if 'abc':
    print 'ok'
Run Code Online (Sandbox Code Playgroud)

  • @JamesLin` ==`在PHP中是Python的`==`,`===`相当于Python的`is`,据我所知,PHP没有相当于Python的'真实性'(`bool(.. .)`). (2认同)

Mar*_*ers 6

你将节俭与平等混为一谈; 它们不是同一件事.bool()如果您需要与实际值TrueFalse值进行比较,请使用:

>>> bool('abc')
True
Run Code Online (Sandbox Code Playgroud)

您通常直接与== True或比较== False.相反,您使用条件表达式或语句:

if 'abc':
    pass

while 'def':
    pass

foo if 'abc' else bar
Run Code Online (Sandbox Code Playgroud)

只有空容器,数字零和False并且None是假的,其他一切都是无用的; 您可以使用它bool()来明确地测试该条件.您可以通过实现__len__()和返回使自定义类型看起来像空容器0,或者通过实现*看起来像一个数字,并在实例是数字零的布尔等价物时返回.__nonzero__()False

*在Python 3中,请__bool__改用.