要強制轉換值以布爾值,我通常會做到以下幾點:在哪裏將``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