python random- 生成偽隨機數
9.6. random
- 生成偽隨機數
該模組為各種分佈實現偽隨機數生成器。
對於整數,從範圍中有統一的選擇。對於序列,存在隨機元素的統一選擇,用於生成列表的隨機排列的函式,以及用於隨機抽樣而無需替換的函式。
在實線上,有計算均勻,正態(高斯),對數正態,負指數,伽馬和貝塔分佈的函式。為了生成角度分佈,可以使用von Mises分佈。
幾乎所有模組函式都依賴於基本函式random()
,它在半開放範圍[0.0,1.0]內均勻生成隨機浮點數。Python使用Mersenne Twister作為核心生成器。它產生53位精度浮點數,週期為2 ** 19937-1。C中的底層實現既快又執行緒安全。Mersenne Twister是現存最廣泛測試的隨機數發生器之一。但是,完全確定性,它不適用於所有目的,並且完全不適合加密目的。
此模組提供的函式實際上是random.Random
類的隱藏例項的繫結方法。您可以例項化自己的例項Random
以獲取不共享狀態的生成器。
類Random
也可以,如果你想用你自己設計的不同的基本發電機子類:在這種情況下,覆蓋random()
, seed()
,getstate()
,和setstate()
方法。可選地,新生成器可以提供getrandbits()
方法 - 這允許randrange()
在任意大範圍內產生選擇。
警告
此模組的偽隨機生成器不應用於安全目的。有關安全性或加密用途,請參閱該secrets
模組。
也可以看看
M. Matsumoto和T. Nishimura,“Mersenne Twister:623維等分的均勻偽隨機數發生器”,ACM Transactions on Modeling and Computer Simulation Vol。1998年1月8日第1期。
具有長週期和相對簡單的更新操作的相容替代隨機數發生器的互補 - 乘法攜帶配方。
9.6.1.簿記功能
random.
seed
(a =無,版本= 2 )
初始化隨機數生成器。
如果一個被省略或None
,當前系統時間被使用。如果作業系統提供隨機源,則使用它們而不是系統時間(os.urandom()
有關可用性的詳細資訊,請參閱函式)。
如果a是int,則直接使用。
對於版本2(預設值),a str
,bytes
或bytearray
物件將轉換為a int
並使用其所有位。
與版本1(提供用於從舊版本的Python再現隨機序列)時,演算法str
和bytes
產生更窄的範圍種子。
版本3.2中已更改:已
random.
getstate
()
返回捕獲生成器當前內部狀態的物件。可以傳遞此物件setstate()
以恢復狀態。
random.
setstate
(狀態)
random.
getrandbits
(k )
返回一個帶有k個隨機位的Python整數。此方法隨MersenneTwister生成器一起提供,其他一些生成器也可以將其作為API的可選部分提供。可用時,getrandbits()
可以randrange()
處理任意大範圍。