【发布时间】:2016-02-28 12:44:57
【问题描述】:
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 慢得多。
【问题讨论】:
-
IMO
random.choice([False, True])非常优雅且不言自明。回覆。 speed:你为什么不测试一下? -
另请注意,几乎没有任何情况下您不能使用整数 0 和 1 来代替 False 和 True,所以 randint 就可以了。
-
IMO 我永远不会在实际代码中像这样从外部修改库。在实用程序文件或其他地方定义它,但不要将其添加到
random。 -
只是想连接到this answer,这也暗示了
random.getrandbits(1)。 -
这个问题非常基于意见,并提出了几个不同的问题,但很可能可以编辑成更好的形式。
标签: python