2

戻り値が空でないことをアサートする単体テストを書いていたので、 のようなものを書い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

空でない文字列または 1 より大きい整数は True と評価されるといつも思っていましたが、PHP と混同したのかもしれません。

そして、私はいつも私が間違っていたif 'abc'のと同等だと思っていました:(if 'abc' == True

4

2 に答える 2

7

'abc'は と等しくありませんTrueが、真実です。これらは 2 つの異なる概念です。つまり、これは印刷されません'ok':

if 'abc' == True:
    print 'ok'

...しかし、これは:

if 'abc':
    print 'ok'
于 2013-08-29T20:52:34.023 に答える
6

あなたは誠実さと平等を混同しています。それらは同じものではありません。実際の値bool()と比較する必要がある場合に使用します。TrueFalse

>>> bool('abc')
True

通常、またはと直接比較することはありませ。むしろ、条件式またはステートメントを使用します。== True== False

if 'abc':
    pass

while 'def':
    pass

foo if 'abc' else bar

空のコンテナ、数値ゼロ、およびFalseおよびのみNoneが偽であり、それ以外はすべて成功しています。を使用bool()して、その条件を明示的にテストできます。__len__()を実装して返すことでカスタム型を空のコンテナのように見せたり、 *0を実装してインスタンスが数値ゼロに相当するブール値になる場合に返すことで数値のように見せたりすることができます。__nonzero__()False

* Python 3 では、__bool__代わりに を使用します。

于 2013-08-29T20:52:13.920 に答える