簡體   English   中英

與random.seed()一起使用的建議種子值是多少?

[英]What is suggested seed value to use with random.seed()?

問題很簡單:

我正在使用python random模塊生成隨機整數。 我想知道random.seed()函數使用的建議值是多少? 目前我將此默認設置為當前時間,但這並不理想。 看起來字符串文字常量(類似於密碼)也不是理想/強大

建議?

謝謝,-aj


更新:

我生成隨機整數的原因是為了生成測試數據。 這些數字不需要是可重復的。

根據random.seed的文檔:

如果省略x或None ,則使用當前系統時間; 當前系統時間也用於在首次導入模塊時初始化生成器。 如果操作系統提供隨機源,則使用它們而不是系統時間(有關可用性的詳細信息,請參閱os.urandom()函數)。

如果你沒有將某些內容傳遞給種子,它將嘗試使用操作系統提供的隨機源而不是時間 ,這總是更好的選擇。 這可以為您節省一些工作,並且可以達到最佳效果。 關於可用性, os.urandom的文檔告訴我們:

在類UNIX系統上,這將查詢/ dev / urandom,在Windows上,它將使用CryptGenRandom。

跨平台隨機種子是這里的重大勝利; 您可以安全地省略種子並相信它幾乎在您將使用Python的每個平台上都是隨機的 即使Python回歸到時間,也可能只有一毫秒的窗口(或更少)來猜測種子。 我不認為你使用當前時間會遇到任何麻煩 - 即便如此,它只是一個后備。

對於大多數情況下使用當前時間已經足夠了。 有時,您需要使用固定數字生成偽隨機數以進行比較。

設置種子是為了重復性,而不是安全性。 如果有的話,通過使用固定種子而不是不斷變化的種子,可以降低系統的安全性。

也許這不是你的問題,但是使用系統時間作為種子的問題是那些大致知道你的系統何時啟動的人可能能夠在看到你的系統中的一些數字之后猜測你的種子(通過試驗)。序列。
例如, 不要將系統時間用作在線撲克游戲的種子

如果您使用隨機生成測試數據,我想建議重現性可能很重要。

想想一個用例:對於數據集X,你會得到一些奇怪的行為(例如崩潰)。 事實證明,數據集X顯示了一些在其他數據集Y和Z中不那么明顯的功能,並揭示了一個已經逃脫測試套件的錯誤。 現在知道種子是有用的,這樣你就可以精確地重現bug,你可以修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM