値をブール値に型キャストするために、私は通常次のことを行います。
not not value
これは、を使用するよりも高速ですbool
。timeitからの出力:
python -m timeit '[bool(t) for t in [[], {}, "", 0, [1], {"a": "n"}, "asdf", 2323]]'
1000000 loops, best of 3: 1.81 usec per loop
python -m timeit '[(not not t) for t in [[], {}, "", 0, [1], {"a": "n"}, "asdf", 2323]]'
1000000 loops, best of 3: 1.11 usec per loop
私はこれを使用してそれをテストしようとしました:
>>> [bool(t) == (not not t) for t in [None, [], {}, "", 0, [1], {'a': 'n'}, "asdf", 2323]]
[True, True, True, True, True, True, True, True, True]
そして、それは最も一般的なケースで機能するようです。
読みやすさに関する議論はさておき、これはどこで失敗するのでしょうか、それともなぜこれが悪いことになるのでしょうか?