📌 置頂: 請把任何比你弱勢的用路人當作你的至親對待。跟前車保持安全車距 (2秒以上)。

random — 你所不知道的 Python 標準函式庫用法 02

In

,

Tags:



by

random – 產生偽隨機亂數

This module implements pseudo-random number generators for various distributions.

官方介紹文件:9.6. random — Generate pseudo-random numbers

如果要產生亂數密碼或是 token,請使用 secrets 模組絕對不要使用 random 模組來產生密碼。

亂數狀態相關

01. random.seed(a=None, version=2)

random.seed() 初始化亂數種子。a 如果是 None 則使用目前的亂數種子。a 可以是 str, bytes, bytearray, 都會被轉型成 int

02. random.getstate()

random.getstate() 取得亂數器內部狀態。

03. random.setstate(state)

random.setstate() 設定亂數器內部狀態,state需為 random.getstate() 獲得之 state。

使用範例:

整數亂數產生

01. random.randrange(stop) / random.randrange(start, stop[, step])

回傳一個 range(start, stop, step) 之中的數值。類似於 choice(range(start, stop, step)) ,可是不會真的做出一個 range object。

02. random.randint(a, b)

回傳一個整數 N (a <= N <= b)。

 

序列操作相關

01. random.choice(seq)

seq 之中回傳一個元素。如果 seq 是空的,會回傳 IndexError

02. random.choices(population, weights=None, *, cum_weights=None, k=1)

所有動物一律平等,但一些動物比其他動物更加平等。

回傳從 population 中選取 k 個元素。可以設定 weights 或是 cum_weights 來改變元素的權重。weights [10, 5, 13, 27] 跟 cum_weights [10, 15, 28, 55] 是相同的。此為重置抽樣 (sampling with replacement)。

03. random.shuffle(x[, random])

亂數洗掉 x 中的順序。random 參數可以放入 [0.0, 1.0) 的浮點數。

04. random.sample(population, k)

回傳長度為 k 且元素唯一的 list。此為非重置抽樣 (sampling without replacement)。

重置抽樣、非重置抽樣

  • Sampling with replacement: 從總體抽出一個元素後,將該元素放回總體。接著重新抽取,因此有機會抽取到相同的元素。
  • Sampling without replacement: 從總體抽出一個元素後,不會將該元素放回總體。因此不會在次抽到已抽到的元素。

使用範例:

 


Comments

2 responses to “random — 你所不知道的 Python 標準函式庫用法 02”

  1. 路人 avatar
    路人

    您好,在Google搜尋random.choice找到您的Blog
    老師剛好有派作業就是用random.choice做出亂數密碼,可以詢問為何您不建議使用random.choice產生密碼呢?
    感謝您

    1. louie.lu avatar
      louie.lu

      Python random module 使用的是 PRNG,在密碼學上這樣強度並不足夠。

      如果要達到密碼學的強度的密碼,可以使用 secrets module。

      例如:


      >>> secrets.token_urlsafe()
      'Pls-bAiy8E3qHxjsPCYaGf7IMZX_7T8Z5gio0p55vnw'

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.