[英]python 3: random.seed(): where to call it?
我需要確保程序中的所有隨機性都是完全可復制的。 我應該在哪里撥打random.seed()?
我認為它應該在我的main.py
模塊中,但是它導入了碰巧使用隨機函數的其他模塊。
我可以仔細瀏覽我的導入,看看哪一個是第一個執行,但是當我改變我的代碼結構時,我將不得不記得再次重做這個分析。
有沒有簡單安全的解決方案?
在主模塊的“導入部分”中執行代碼實際上是安全的,因此如果您不確定導入可能使用或不使用隨機模塊的其他模塊,可能繞過您的種子,您當然可以使用類似的東西
import random
random.seed(seed_value)
import something
import else
if __name__ == "__main__":
main()
如果你想隨機可復制,最好在應用程序中random.Random
實例,在該實例上調用seed()
,並將該實例用於隨機數。
random.random()
實際上使用random.Random
類的單例,以方便那些不在乎自己創建類實例的人。 但是,該單例可能與其他可能想要調用random.random()
以生成隨機數的模塊共享。 這就是為什么在你的情況下你最好實例化你自己的random.Random
實例。
引用文檔 :
該模塊提供的函數實際上是
random.Random
類的隱藏實例的綁定方法。 您可以實例化您自己的Random
實例,以獲取不共享狀態的生成器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.