[英]How best to initialize python's random module within a function
當隨機模塊嵌入到 function 中時,我正在尋找一些關於生成盡可能隨機數的信息,如下所示:
import random as rd
def coinFlip()
flip = rd.random()
if flip > .5:
return "Heads"
else:
return "Tails"
main()
for i in range(1000000):
print(coinFlip())
編輯:理想情況下,上述腳本總是會產生不同的結果,因此限制了我使用 random.seed() 的能力
每次調用 function 時,嵌入在 function 中的隨機模塊是否使用新種子進行初始化? (而不是使用之前生成的隨機數作為種子。)
如果是這樣...
考慮到此處 for 循環中的系統時間非常接近甚至可能相同(取決於系統時間的精度),系統時間的默認初始化是否足夠精確以提取真正的隨機數。
有沒有辦法在 function 之外初始化一個隨機模塊並讓 function 拉下一個隨機數(以避免多次初始化。)
還有其他更多的pythonic方法來完成這個嗎?
非常感謝!
如果要初始化偽隨機數生成器,請使用random.seed()
你可以看看這里
如果不使用 random.seed() 初始化偽隨機數生成器,內部隨機生成器調用種子 function 並使用當前系統當前時間值作為種子值。 這就是為什么每當我們執行 random.random() 我們總是得到不同的值
如果您希望始終擁有一個 diff 編號,那么您不應該費心初始化隨機模塊,因為在內部,它默認使用的隨機模塊是當前系統時間(始終是 diff)。 只需使用:
from random import random
def coinFlip()
if random() > .5:
return "Heads"
else:
return "Tails"
更清楚地說,隨機模塊在每次使用時都不會初始化,僅在導入時進行,所以每次調用 random.random() 時,你都有下一個保證不同的數字
對於初學者:
該模塊為各種分布實現偽隨機數生成器。
[..]
該模塊提供的函數實際上是
random.Random
class 的隱藏實例的綁定方法。 您可以實例化您自己的Random
實例以獲取不共享 state 的生成器。
random
模塊是一個Pseudo-Random Number Generator 。 所有 PRNG 都是完全確定的,並且具有state 。 這意味着,如果 PRNG 位於相同的 state 中,則下一個“隨機”數字將始終相同。 如上段所述,您的rd.random()
調用實際上是對隱式實例化的Random
object 的調用。
所以:
每次調用 function 時,嵌入在 function 中的隨機模塊是否使用新種子進行初始化?
不。
有沒有辦法在 function 之外初始化一個隨機模塊並讓 function 拉下一個隨機數(以避免多次初始化。)
您不需要避免多次初始化,因為它沒有發生。 如果您想精確控制 state,您可以實例化您自己的Random
object。
class random.Random([seed])
Class 實現了隨機模塊使用的默認偽隨機數生成器。
random.seed(a=None, version=2)
初始化隨機數生成器。 如果省略a
或None
,則使用當前系統時間。 [..]
因此,隱式實例化的Random
object 使用系統時間作為初始種子(盡管請進一步閱讀),並且從那里將保留 state。 因此,每次您啟動 Python 實例時,都會以不同的方式播種,但只會播種一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.