In Python 3.6, new module, secrets
, was added.
What is the most efficient way to generate random integer in range [n, m)
using this module?
I tried choice(range(n, m))
, but I doubt it is the best way.
The secret
module provides the same interface as random
; the underlying random generator has just been changed to SystemRandom
which is cryptographically strong.
In short, use it as you would random
in circumstances that require a bit more security; I doubt choice
suffers from performance so much to warrant your concern.
secrets.choice(range(n, m))
should be fine, since range
is lazy on Python 3.
n + secrets.randbelow(m-n)
is another option. I wouldn't use it, since it's less obviously correct.
Since secrets
provides access to the SystemRandom
class, with the same interface as random.Random
, you can also keep your own SystemRandom
instance:
my_secure_rng = secrets.SystemRandom()
and do
my_secure_rng.randrange(n, m)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With