Python 3.6では、new module, secrets
が追加されました。Python `secret`モジュールを使って乱数を生成するには?
このモジュールを使用して範囲[n, m)
にランダムな整数を生成する最も効率的な方法は何ですか?
私はchoice(range(n, m))
を試しましたが、それが最善の方法だとは思わないです。 range
は、Python 3に
n + secrets.randbelow(m-n)
怠惰であることは、別のオプションであるため、
Python 3.6では、new module, secrets
が追加されました。Python `secret`モジュールを使って乱数を生成するには?
このモジュールを使用して範囲[n, m)
にランダムな整数を生成する最も効率的な方法は何ですか?
私はchoice(range(n, m))
を試しましたが、それが最善の方法だとは思わないです。 range
は、Python 3に
n + secrets.randbelow(m-n)
怠惰であることは、別のオプションであるため、
secrets.choice(range(n, m))
は、問題ないはずです。それほど正確ではないので、私はそれを使用しません。
secrets
がrandom.Random
と同じインタフェースで、あなたはまた、独自のSystemRandom
インスタンスを維持することができ、SystemRandom
クラスへのアクセスを提供しているので:
my_secure_rng = secrets.SystemRandom()
と
my_secure_rng.randrange(n, m)
を行うsecret
モジュールが提供しますrandom
と同じインターフェイス。基本的なランダムジェネレータは、暗号的に強いSystemRandom
に変更されました。
要するに、もう少しセキュリティが必要な状況でrandom
と同じように使用してください。私はchoice
があなたの懸念を保証するほどのパフォーマンスに苦しんでいるとは思わない。
import secrets
num = secrets.randbelow(50)
print(num)
もっと詳しく説明してください。 – rayryeng