要强制转换值以布尔值,我通常会做到以下几点:在哪里将``not not`而不是`bool()`布尔变为布尔值失败?
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]
而且似乎为最常见的情况下工作。可读性
争论不谈,这里这里会失败,或者为什么这是一个糟糕的事是什么?
你很不幸,布尔()是你的应用程序 –
的性能瓶颈@DavidHeffernan笑。这个问题更多的是出于好奇,而不是“优化” – zsquare
有趣的是,我可以在我的机器上确认这些结果。它可能与函数查找有关。 – Kugel