random 模块
一. 官方文档上的一些定义
1.该模块实现了各种分布的伪随机数生成器。
2.几乎所有的模块函数都依赖于基本函数随机函数,在半开放范围内均匀生成随机浮子[0.0,1.0]。 Python 使用梅森旋转算法作为核心生成器。 它生产53位精度浮标,周期为2 * * 19937-1。 在 c 语言中,基本的实现是快速和线程安全的。 梅森旋转算法是现存测试最广泛的随机数生成器之一。 但是,由于完全确定性,它不适合于所有的目的,并且完全不适合于加密的目的。
3. Warning:The pseudo-random generators of this module should not be used for security purposes. For security or cryptographic uses, see the secrets
module.
该模块的伪随机生成器不应用于安全目的。 对于安全性或者加密使用,请参见secrets模块。
官方文档链接:random-generate dpseudo random numbers
Note: 有与random模块中实现的功能都基于梅森旋转算法,所以可以认为是伪随机,只要是通过科学计算得到的结果都不是真正的随机,所以强烈建议不要在进行密码操作时使用random。
二. 模块函数
random.random()
返回一个范围在[0.0,1.0] 之间的随机浮点数
import random print(random.random()) print(random.random()) print(random.random()) #result #0.13401250901874961 #0.8127610152040938 #0.3549116816608451
random.uniform(low,high)
从(low,high) 范围内,返回一个随机的浮点数
print(random.uniform(1, 10)) print(random.uniform(20, 30)) # 8.241765001406979 # 24.244539919838136
random.randrange(stop)
从range(start, stop, step)中返回随机选择的元素。 这相当于选择(range(start,end,step)中的一个元素 ,但实际上并不构建range对象。
返回的结果在[start,end)中选择,跟range一样随机取值的范围并不包含end。
print(random.randrange(10)) print(random.randrange(1, 10)) print(random.randrange(0, 100, 2)) #result #0 #9 #72
random.randint(low, high)
返回一个范围在[low,high]之间的整数,low, high需要是一个范围,如果该范围为空,会抛出一个ValueError异常
其实还可以看作是random.randrange(n, m+1)
print(random.randint(1, 10))
print(random.randint(100, 101))
print(random.randint(-10, 1))
#result
#6
#100
#-2
random.choice(seq)
从一个非空序列中返回一个随机元素,如果seq为空,会抛出IndexError异常
print(random.choice(['python', 'java', 'php', 'ruby', 'c++', 'c#'])) print(random.choice([x for x in range(10, 100)])) print(random.choice(['python', 'java', 'php', 'ruby', 'c++', 'c#'])) #result #ruby #88 #php
randon.sample(seq, num)
从一个非空序列中返回num的随机元素组成的列表,如果seq为空,会抛出IndexError异常,注意num的范围要在[0, len(seq)] 之间
a = [1, 2, 3, 4, 5, 6, 7] print(random.sample(a, 1)) print(random.sample(a, 0)) print(random.sample(a, 5)) # [1] # [] # [4, 3, 5, 6, 7]
random.shuffle(seq)
将一个序列原地打乱顺序,直接修改序列,没有返回值,注意由于是in place(原地修改),所以这个序列要是可变数据类型。
如果你想将一个不可变序列打乱顺序,可以使用random.sample(tuple, len(tuple)) 返回一个打乱顺序的新列表。
a = [1, 2, 3, 4, 5, 6, 7] b = (1, 2, 3, 4, 5, 6, 7) print(random.shuffle(a)) print(a) print(random.sample(b, len(b))) #result # None # [3, 1, 2, 7, 5, 4, 6] # [1, 2, 5, 6, 3, 7, 4]
def get_code(n=6, alpha=True): s = '' for i in range(n): num = str(random.randint(0,9)) if alpha: alpha_s = chr(random.randint(65, 90)) num = random.choice([alpha_s, num]) s += num return s print(get_code())