random模塊使用Mersenne Twister算法來計算生成隨機數。這是一個確定性算法,但是可以通過random.seed()函數修改初始化種子[1]。比如:
random.seed() # Seed based on system time or os.urandom() random.seed(12345) # Seed based on integer given random.seed(b'bytedata') # Seed based on byte data
對於random.seed(n),如果使用相同的n值,則隨機數生成函數每次生成的隨機數序列都相同;如果不設置這個值,則系統根據時間來自己選擇這個值,此時每次生成的隨機數序列因時間差異而不同。
例1
import random random.seed(9) for i in range(3): print(random.random())
運行結果如下:
0.46300735781502145 0.37331193139504204 0.13853941251445523
本例中,每次循環時random.random()都采用9作為初始化的種子,生成相同的隨機數序列。在循環中,第一次調用random.random()將返回該隨機數序列的第一個元素,第二次調用random.random()將返回該隨機數序列的第二個元素,以此類推。
再次運行示例代碼的結果如下:
0.46300735781502145 0.37331193139504204 0.13853941251445523
多次運行這個示例代碼,所得結果都是一樣的,因為在本例中,使用的seed()值都是9,所以random.random()每次生成的隨機數序列都相同。
例2
import random for i in range(3): random.seed(9) print(random.random())
運行上述程序的結果如下:
0.46300735781502145 0.46300735781502145 0.46300735781502145
在本例中,使用的seed()值都是9,所以random.random()每次生成的隨機數序列都相同,但是random.seed(9)在循環內部,print(random.random())這行命令每一次輸出時都定位到所生成的隨機數列表的第一個元素。
參考資料:
[1]. 3.11 隨機選擇
[2]. random.seed()的使用