【python測試開發棧】幫你總結python random模塊高頻使用方法

隨機數據在平時寫python腳本時會經常被用到,比如隨機生成0和1來控制邏輯、或者從列表中隨機選擇一個元素(其實抽獎程序也類似,就是從公司所有人中隨機選擇中獎用戶)等等。這篇文章,就幫大家整理在python中random模塊使用頻率比較高的方法。

常用方法

爲了方便大家理解和記憶,將方法進行了歸類:

整數用函數

  • random.randrange(stop)
    • 隨機返回[0, stop-1]之間的整數
  • random.randrange(start, stop, step)
    • 隨機返回[start, stop-1]之間的整數。
    • step是遞增計數,列一個公式你就明白了:(隨機生成的值—start)%step=0
  • random.randint(start, stop)
    • 隨機返回[start, stop]之間的整數
  • random.getrandbits(bits)
    • 用於隨機對應bits位的整數
    • 隨機返回[0, 2的bits位-1]之間的整數。

最後需要注意一點:上面的幾個方法也是可以隨機返回負數的,只需要參數傳承負數就可以了。下面舉個例子:

    # 0-2之間的整數
    print(random.randrange(3))
    # 1-299之間的整數,增長基數是5
    print(random.randrange(1, 300, 5))
    # 1-20之間的整數
    print(random.randint(1, 20))
    # -3到0之間的負數
    print(random.randint(-3, 0))
    # -3到-1之間的負數
    print(random.randrange(-3, 0))

    # 返回1~2-1之間的數字
    print(random.randrange(1))
    # 返回1~2的32次方-1之間的數字
    print(random.getrandbits(32))
    
    ## 返回值
    0
    1
    17
    0
    -1
    0
    3150567570

浮點型函數

  • random.random()
    • 隨機返回[0,1)之間的浮點型數字
  • random.uniform(a, b)
    • 隨機返回[a,b)之間的浮點數字

其實上面的兩個方法也是符合數學隨機分佈模式的,爲了方便大家理解,我這裏單獨列出來(區別於下面的 數學分佈模式),方便大家在隨機生成浮點型數字時,能少些猶豫。

# 1. 生成一個0-1之間隨機浮點數
print(random.random())
# 2. 生成一個a-b之間的隨機浮點數
print(random.uniform(10, 500))
print(random.uniform(40, 10))
  
  # 返回值
  0.7833926665736892
  150.2805875943869
  39.88236257691508

序列函數

顧名思義,序列函數隨機的對象是列表。

  • random.choice(list)
    • 從list隨機返回一個元素。
  • random.choices(list, weights,k)
    • 相當於random.choice()的升級版本。
    • weights是權重,針對list的每個元素都設置權重,來改變隨機的概率。
    • k是返回幾個元素。需要注意這個方法返回的是列表。
  • random.sample( population, k )
    • 3.6新增功能,用於從population列表中,返回隨機無重複的抽樣。
    • 前面提過抽獎,其實如果你想做一個抽獎系統,可以用這個方法改造。
  • random.shuffle(list)
    • 將list列表中的元素隨機打亂。

對應的例子如下:

  # 從給定的序列中隨機選擇一個元素
  print(random.choice([1, 2, 3, 4, 5]))
  # random.choice的升級版本,還可以指定某個元素對應的權重
  print(random.choices([1, 2, 3, 4, 5], [10, 15, 45, 50, 60]))
  # 打亂某個序列,從python3.6新增的方法
  list_test = [2, 3, 4, 5, 6]
  random.shuffle(list_test)
  print(list_test)
  # 取樣,從某個列表中,隨機選擇若干個元素
  print(random.sample([1, 2, 3, 4, 5, 6, 7], k=3))

  # 返回值
  3
  [5]
  [6, 3, 4, 2, 5]
  [6, 1, 7]
    

控制random的行爲

  • random.seed( a=None, version=2 )
    • 設置random的種子值,怎麼理解種子值呢?大家就想一句話就好了:"種瓜得瓜種豆得豆",所以一樣的種子值,那麼種出來的結果是一樣的。
    • 假如現在隨機兩次,在調用random隨機生成數據前,將random.seed設置成一樣的值,則隨機生成的值是一樣的。
  • random.getstate()
    • 這個很簡單,就是返回random生成器當前的狀態的。
  • random.setstate(state)
    • 這個用於設置random的狀態
    • setstate和getstate方法結合起來使用,可以用於恢復random的狀態。

對應的例子如下:

 # 驗證seed
 random.seed(1)
 print(random.randrange(1000))
 random.seed(1)
 print(random.randrange(1000))
 # 驗證random的狀態
 state = random.getstate()
 print(random.randrange(1000))
 print(random.randrange(1000))
 random.setstate(state)
 print(random.randrange(1000))
 
 # 返回結果
  137
  137
  582
  867
  582

數學分佈模式

下面列的這些方法都是跟數學分佈的概念有關係,說實話大學裏學的相關的東西,都還給老師了,我查了資料想去理解不同的數學分佈的知識,但是理解起來有些吃力,不過其實對我們使用的人來說,只需要理解其能根據一定規則,隨機返回浮點數就可以了。

  • random.triangular(low, high, mode) 以三角分佈的概率分佈返回隨機數
  • random.betavariate(alpha, beta) 以beta分佈的概率分佈返回0到1之間的隨機數
  • random.expovariate() 以指數分佈返回隨機數
  • random.gammavariate(alpha, beta) 以gamma分佈的概率分佈返回隨機數
  • random.gauss(mu, sigma) 以高斯分佈的概率分佈返回隨機數
  • random.lognormvariate(mu, sigma) 以對數正態分佈的概率分佈返回隨機數
  • random.normalvariate(mu, sigma) 和高斯分佈類似
  • random.vonmisesvariate(mu, kappa) 以von Mises分佈的概率分佈返回隨機數
  • random.paretovariate(alpha) 以Pareto( 帕累託)分佈的概率分佈返回隨機數
  • random.weibullvariate(alpha, beta) 以Weibull(威爾布)分佈的概率分佈返回隨機數

其實大家也不需要完全記住上面的方法,碰到具體的使用場景,知道有對應的方法,能查看文檔找到就可以了。

總結

上面幫大家整理了random模塊高頻使用的方法,相對還是比較簡單的,大家有任何的問題,歡迎留言。

關注【公衆號:軟件測試佈道師】,回覆【python】,即可獲取【python自動化及編程實踐資料】
發佈了20 篇原創文章 · 獲贊 0 · 訪問量 4063
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章