如何使用Python的'secret'模块生成随机整数?

rta7y2nd  于 2022-11-28  发布在  Python
关注(0)|答案(4)|浏览(125)

在Python 3.6中,添加了new module, secrets
使用此模块生成[n, m)范围内的随机整数的最有效方法是什么?
我试过choice(range(n, m)),但我怀疑这是最好的方法。

atmip9wb

atmip9wb1#

secrets.choice(range(n, m))应该没问题,因为range在Python 3上是惰性的。
n + secrets.randbelow(m-n)是另一个选项。我不会使用它,因为它的正确性不太明显。
由于secrets提供了对SystemRandom类的访问,并且具有与random.Random相同的接口,因此您还可以保留自己的SystemRandom示例:

my_secure_rng = secrets.SystemRandom()

而且做了

my_secure_rng.randrange(n, m)
kpbwa7wx

kpbwa7wx2#

secret模块提供与random相同的接口;下面的随机数发生器刚刚被改变为SystemRandom,其在密码学上是强的。
简而言之,在需要更多安全性的情况下,可以像random一样使用它;我怀疑choice的性能会受到如此大的影响,以至于值得您关注。

zaq34kh6

zaq34kh63#

import secrets
num = secrets.randbelow(50)
print(num)
fkvaft9z

fkvaft9z4#

没有足够的代表进行评论,但如果您运行快速执行时间测试,他们实际上报告基本相同,则可以补充用户2357112的答案。

Best of 3 trials with 1,000,000 loops per trial:
        randrange() 1.39906 seconds total time.
        choice() 1.39431 seconds total time.

相关问题