Python学习笔记 random 模块

目录

  - 简述
  - 常用方法及解析
  - 小栗子

简述

  random 模块实现了各种分布的伪随机数生成器,利用这些伪随机数生成器,我们可以得到伪随机的数或者序列。

  可以通过属性 random.__all __ 来获取模块内所有公开的函数。random 模块几乎所有函数都依赖于基本函数 random() ,它在半开放区间 [0.0,1.0) 内均匀地生成随机浮点数。 Python 使用 Mersenne Twister 作为核心生成器,它产生 53 位精度浮点数,周期为 219937-1 ,其在 C 的底层实现,既快又线程安全。 Mersenne Twister 是现存测试最广泛的随机数发生器之一。 但是,因为它的完全确定性,它不适用于所有工作,且完全不适合加密工作。

  random 模块提供的函数其实是 random.Random 类的隐藏实例的绑定方法,该隐藏实例名为 _inst ,它在 random 导入时被创建,并将其方法导出为模块级函数,这些函数在用户代码和 Python 库中共享状态。如果你想获取不共享状态的生成器,可以通过实例化 random.Random 来实现。

  除了 Random 类,random 模块还提供了 SystemRandom 类,它使用系统函数 os.urandom() 从操作系统提供的源中生成随机数。这并非适用于所有系统, 也不依赖于软件状态,序列不可重现。

  下面介绍 random 模块中常用的函数

常用方法及解析

常用的方法

	random.random()
        功能:返回 [0.0, 1.0) 区间内的一个伪随机浮点数
        参数:无
        返回值:一个浮点数

    uniform(a, b)
        功能:返回 [a, b][a, b)区间(这取决于a+(b-a)*random()中的浮点舍入)内的一个伪随机浮点数
        参数:a, b可以是整数也可以是浮点数,a 也可以大于 b,其中小的为起点,大的为终点
        返回值:一个浮点数

    randint(a, b)
        功能:返回 [a, b] 区间内的一个随机整数
        参数:a 和 b 为两个整数,且 a<=b
        返回值:一个整数

    choice(seq)
        功能:从非空序列 seq 返回一个随机元素
        参数:seq 为非空序列
        返回值:seq 中的一个元素

    choices(population, weights=None, cum_weights=None, k=1)
        功能:从 population 中选择,返回长度为 k 的列表
        参数:population 表示一个序列,weights 表示相对权重,cum_weights 表示累计权重,k 表示从 population 中选出元素(可重复)的个数
        返回值:一个长度为 k 的列表
        
        说明:如果指定了 weight 序列,则根据相对权重进行选择。 或者,如果给出 cum_weights 序列,则根据累积权重进行选择。
        例如,相对权重``[10, 5, 30, 5]``相当于累积权重``[10, 15, 45, 50]``。 
        在内部,相对权重在进行选择之前会转换为累积权重,因此提供累积权重可以节省工作量。
        如果既未指定 weight 也未指定 cum_weights ,则以相等的概率进行选择。 如果提供了权重序列,则它必须与 population 序列的长度相同。

        此处应有个例子:
        """
        	import random
            li = [1, 2]
            print(random.choices(population=li, cum_weights=[2, 10], k=10))
            # [2, 2, 1, 1, 2, 2, 1, 1, 2, 2]
            # 每次输出结果基本都不一样,但明显可以看出 2 的个数要比 1 多
		"""
		
    randrange(start, stop[, step])
        功能:从开始为 start,结束为 stop,步长为 step 的序列中随即返回一个元素
        参数:start 表示起点,stop 表示终点,step 表示步长,步长可选
        返回值:[start, stop)序列中的一个元素
        说明:该函数相当于  choice(range(start, stop, step)) ,但实际上并没有构建一个 range 对象。

    shuffle(x[, random])
        功能:将序列 x 随机排序
        参数:x 表示一个可变序列,random 表示一个 0 参函数,在 [0.0, 1.0) 中返回随机浮点数;默认情况下,这是函数 random()
        返回值:None

    sample(population, k)
        功能:返回从给定序列或集合中选择的唯一元素的长度为 k 的列表。 用于无重复的随机抽样
        参数:population 表示给定的序列或集合,k 表示返回列表的长度
        返回值:返回包含来自 population 元素的新列表,同时保持 population 不变
        
        说明:要从一系列整数中选择样本,请使用 range() 对象作为参数。 因为对于大量数据来说,这种方法特别快且节省空间

    seed(a=None, version=2)
        功能:指定种子来初始化伪随机数生成器。
        参数:a 表示随机数种子,若为 None,则默认为是当前的系统时间,version 表示版本号
        返回值:None
        
        说明:a 可以是 int,若为 strbytesbytearray 则转换为 int 并使用它的所有位(对于版本 2)

    getstate()
        功能:获取生成器当前内部状态的对象,这个对象可以传递给 setstate() 来恢复状态
        参数:无
        返回值:一个三元组,表示生成器的内部状态

    setstate(state)
        功能:从 getstate() 返回的对象中恢复内部状态
        参数:state 应该是 getstate() 的返回对象
        返回值:None

    getrandbits(k)
        功能:生成具有 k个随机位的 int
        参数:表示生成的随机数的二进制位数
        返回值:一个整数

一些数学分布(不做详细介绍)

		vonmisesvariatee(mu, kappa)
        normalvariate(mu, sigma):正态分布
        lognormvariate(mu, sigma):对数正态分布
        expovariate(lambd):指数分布
        gammavariate(alpha, beta):伽玛分布
        triangular(low, high, mode):对称分布
        gauss(mu, sigma):高斯分布
        betavariate(alpha, beta):贝塔分布
        paretovariate(alpha):帕累托分布
        weibullvariate(alpha, beta):威布尔分布

小栗子

随机生成验证码的小栗子

import random


def my_test(n):
    password = ''
    for i in range(n):
        s1 = chr(random.randint(65, 90))
        s2 = str(random.randint(0, 9))
        password += random.choice([s1, s2])
    return password


print(my_test(6))

你可能感兴趣的:(Python学习笔记 random 模块)