Python没有random.randbool
函数,但它有randint
、randrange
和random
函数。如果我想使用一个randbool
函数,我可以使用以下代码:
import random
random.randbool = lambda: random.random() >= 0.5
这样做推荐吗?是否符合“Pythonic”?速度会慢很多吗?这肯定可以使以后的代码更易于理解,因为在代码中不是内联
random.random() >= 0.5
或random.choice([False, True])
可能更令人困惑。当然,另一种选择就是使用常规函数 -
def randbool():
return random.random() >= 0.5
哪个更好?
编辑:一些timeit
基准测试:
> python -m timeit -s "import random" -s "def randbool():" -s " return random.random() >= 0.5" "randbool()
1000000 loops, best of 3: 0.275 usec per loop
> python -m timeit -s "import random" "random.random() >= 0.5"
10000000 loops, best of 3: 0.152 usec per loop
> python -m timeit -s "import random" -s "random.randbool = lambda: random.random() >= 0.5" "random.randbool()"
1000000 loops, best of 3: 0.322 usec per loop
> python -m timeit -s "import random" "random.choice([False, True])"
100000 loops, best of 3: 2.03 usec per loop
> python -m timeit -s "import random" "random.randint(0, 1)"
100000 loops, best of 3: 2.9 usec per loop
因此,最快的方法是内联,其次是常规函数,然后是定义
random.randbool
。而choice
和 randint
则较慢。
random.choice([False, True])
非常优雅且自我解释。关于速度:为什么不测试一下呢? - vaultahrandom.getrandbits(1)
。 - Matt Hall