簡體   English   中英

python 3:random.seed():在哪里調用它?

[英]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實例,以獲取不共享狀態的生成器。

你可以滾動自己封裝隨機的單例。 然后,您可以在隨機 getstate和setstate 使用Python文檔來更改隨機數生成器的狀態。 這將為您的程序提供兩個隨機數生成器。

暫無
暫無

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

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