2011-12-07 5 views
6
乱数

可能性の重複:
Python's random: What happens if I don't use seed(someValue)?シード()とPython

今日は、私はちょうどより多くの経験を積んだ私よりも、プログラマからseed()機能について言われました。私は通常、リストとしてのchoice()を引数として呼び出します。これ以上の乱数機能は必要ありません。

私のプログラマーの友人は、Pythonは常にデフォルトのシードとしてゼロを使って乱数演算を開始するので、コールシードが必要だと教えてくれました。これは、数字がランダムに表示されますが、実際には常に同じシーケンスが得られることを意味します。

これは私をかなり奇妙に感じます。たとえば、choice()の機能は、実際には機能する前にシードを呼び出さないのでしょうか?あるいは、プログラムで種子を変更できない理由は、それ自体が乱数を選ぶことになるからです。最終目標が乱数を選ぶことも問題であることは明らかです。

私はここでちょっと怒っていますが、これがどのように実装されたかについて誰かが明確に考えているかどうかは疑問です。

+2

これらは、ドキュメント(http://docs.python.org/library/random.html)で学ぶことができるすべてのこと、またはインタプリタで自分自身をテストすることです。 Pythonを実行し、 'random.choice(range(1000))'を2回実行してみてください。あなたは同じ答えを得ますか? –

+0

@MichaelHoffmanあなたはその点を逃した。もちろん、同じPythonプロセスで2回同じ答えを返すことはありません。正しいテストは、2つのプロセスを開き、それぞれを試してみることです。 –

+0

私はそれをあまり書きませんでした。私は、全体の操作(Pythonの実行と機能の実行)を2回行うべきだということを意味していました。 –

答えて

28

あなたの友人が死んで間違っている、と彼はseed()機能のドキュメントを読めばそう知っているだろう:

は、基本的な乱数ジェネレータを初期化します。オプションの引数xは任意のハッシュ可能なオブジェクトです。 xを省略するか、Noneを指定すると、現在のシステム時刻が使用されます。 現在のシステム時間は、モジュールが最初にインポートされたときにジェネレータを初期化するためにも使用されます。ランダム性のソースがオペレーティングシステムによって提供されている場合、それらはシステム時間の代わりに使用されます(可用性の詳細については、os.urandom()関数を参照してください)。

(重点鉱山。)

彼は、それが他の言語でどのように動作するかの彼の知識に基づいて推測しています。 seed()関数は主に提供されているため、再現可能な擬似乱数のストリームを得ることができます(特定のアプリケーションには必要です)。

randomモジュールから直接呼び出す関数は、実際にはrandom.Randomクラスの隠しインスタンスのメソッドのエイリアスです。少なくとも実質的に各インスタンスは__init__()の中でseed()を呼び出します。

choice()機能は明らかに、操作の前にseed()を呼び出すことはありません。これは、すべての選択肢の前に再シーディングすることを意味します。

+0

あなたの答えをありがとう。 –

関連する問題