簡體   English   中英

隨機模塊中的random.Random(不是random.random)實際上在Python中做什么?

[英]What does random.Random (not random.random) from the random module actually do in Python?

我想對random.Random函數/類的實際作用有一個清晰的解釋。 這就是Python的random模塊必須說的。

綁定模塊函數使用的隨機數生成器基類。 用於實例化Random實例以獲取不共享狀態的生成器。 對於多線程程序尤其有用,它為每個線程創建一個不同的Random實例,並使用jumpahead()方法來確保每個線程看到的生成序列不會重疊。

如果要使用自己設計的其他基本生成器,還可以將Random類作為子類:在這種情況下,請重寫以下方法:random(),seed(),getstate(),setstate()和jumpahead()。 (可選)實現getrandbits()方法,以便randrange()可以覆蓋任意大范圍。

我不明白這一點,因為我仍然是Python的初學者。 我確實對基類和派生類有所了解,這顯然與此有關。

我嘗試使用Python的IDLE中的random.Random()函數/類,發現了以下內容。

  • 它似乎只接受1個參數。(字符串,整數,浮點數)
  • 似乎不接受任何列表或字典作為參數; 聲明它們是不可哈希的。 (“不可散列”是什么意思?)
  • 似乎只在重復調用它時才返回兩個值,而不管傳遞給它的參數如何,兩個值分別是“ 0x03F24E40處的random.Random對象”和“ 0x03F26B60處的random.Random對象”。

我希望我可以對random.Random進行簡單的解釋,並解釋為什么它僅返回兩個值。 (我是一個初學者,所以請原諒我對此主題的無知!)

歡迎對諸如seed(),getstate(),setstate()和jumpahead()之類的函數如何工作的任何解釋,或對解釋如此的任何文檔/書籍的引用。

簡而言之, random.Random()創建一個偽隨機數生成器,即一個對象,該對象生成一個看起來隨機的數字序列(都是pseudorandom )。

random.Random()接受一個對象,該對象可以是“字符串”,“ int”(整數)或“ float”(整數或非整數,例如3.2或888)。 該對象稱為種子 ,它可以用於創建一個生成特定序列的偽隨機數的對象。 例如,您可以致電-

  • random.Random(57)
  • random.Random(888.6)
  • random.Random("Hello World") ,或
  • random.Random(99898989)

獲得特定偽隨機數序列的生成器。 但是,只有在程序中需要可重復的“隨機性”時,才應指定種子

然后,您可以使用此生成器從該序列中提取偽隨機數:

# Create a generator without
# a seed, so that the pseudorandom
# sequence will almost surely differ
# from run to run
randomGen = random.Random()
# Generate a number in [0, 1)
number = randomGen.random()
# Generate an integer in [0, 5]
number = randomGen.randint(0, 5)

注意,該示例將生成器從random.Random分配給名為randomGen的變量; 通常,僅創建生成器本身並沒有用。

暫無
暫無

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

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