首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python random.random() 函數教學:產生 0.0 到 1.0 之間隨機浮點數

     編輯:更多程式設計知識

random.random() 回傳下一個偽隨機浮點數,範圍 [0.0, 1.0)(包含 0.0,不包含 1.0)。這是 random 模組的核心產生器,其他分佈函數(uniform、normal、expovariate 等)皆建立於此。本文說明語法、回傳值、常見轉換與進階用法。

函數簽名


import random
random.random()  # 無參數

基本範例


import random

print(random.random())  # 如 0.37444887175646646
print(random.random())  # 如 0.9507143064099162

# 產生 10 個
for _ in range(10):
    print(random.random())

常見區間轉換


# [a, b) 均勻分佈
def uniform(a, b):
    return a + (b - a) * random.random()

# [a, b] 整數(含兩端)
def randint(a, b):
    return a + int(random.random() * (b - a + 1))

# 任意分佈:反變換法(指數分佈為例)
import math
def expovariate(lambd):
    return -math.log(random.random()) / lambd

進階:random.random() 內部機制

  • 核心演算法:Mersenne Twister (MT19937),週期 219937-1,623 維等分佈。
  • 每次呼叫產生 53 位精度浮點數(IEEE 754 double mantissa 52 位 + 隱含位)。
  • 執行緒安全:模組層級函數共享單一 Random 實例,內部有鎖;高併發建議各執行緒建立獨立 Random() 實例。

可重現性:種子


random.seed(42)
print([random.random() for _ in range(3)])  # 固定序列

# 獨立實例不影響全域狀態
rng = random.Random(123)
print(rng.random())

密碼學安全替代


import secrets
# secrets 使用 OS 熵源 (os.urandom / getrandom)
print(secrets.random())  # Python 3.9+ 新增,等同 random.random() 但安全
# 3.9 前用 secrets.SystemRandom().random()

效能

  • C 實作,極快(約 50-100 ns/呼叫)。
  • 大量陣列請用 numpy.random.random 或 np.random.rand。
  • 區域綁定 _rnd = random.random 可減少屬性查找。

常見誤區

  • 以為回傳值可能為 1.0 → 實際 [0.0, 1.0),永不等於 1.0。
  • 直接用於 int(random.random() * n) 產生 0~n-1 整數 → 有微小偏差(浮點數不均勻),請用 random.randrange(n) 或 random.randint(0, n-1)。
  • 多執行緒共享全域產生器導致爭用,高併發場景請用獨立 Random 實例或 thread-local 儲存。

random.random() 是 Python 隨機數生態的基石,理解其範圍、精度、種子機制與執行緒安全性,能正確構建各種隨機演算法與模擬系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved