要将值类型转换为布尔值,我通常执行以下操作:
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]
它似乎适用于最常见的情况。
除了关于可读性的争论,这在哪里失败,或者为什么这是一件坏事?