一、随机数生成方法
在介绍Python中的随机数种子之前,我们需要先了解一下Python中的随机数生成方法。
Python中提供了一个随机数模块—random,这个模块可以让我们轻松地生成各种随机数。
常用方法有:
import random
random.random() #生成0~1之间的随机数
random.uniform(a, b) #生成a~b之间的随机数
random.randint(a, b) #生成a~b之间的整数随机数
random.choice(seq) #从序列seq中随机选择一个元素
random.shuffle(seq) #将序列seq中元素随机排列
random.sample(seq, k) #从序列seq中随机选择k个元素组成新的序列
二、Python中的随机数种子
但是,Python中如何保证生成的随机数实际上是真随机呢?这就要涉及到随机数种子的概念了。
随机数种子是随机数生成的“起源”,如果两个程序使用了同一个种子,它们所生成的随机数序列也是相同的。
Python在生成随机数时,默认的种子是当前系统时间,这意味着每次运行程序时,所生成的随机数序列都是不同的。
三、设置随机数种子
实际应用中,我们有时需要使用相同的随机序列。这时,我们可以通过设置随机数种子来实现。
方法:
random.seed(a=None, version=2)
a:可以是任意类型的对象,如果没有提供,它会默认使用当前系统时间作为种子
version:如果你使用的是Python 2,设置version为0或1可以保证随机数相同;如果使用的是Python 3,必须将version设置为2,否则可能会得到不同的随机数序列
四、应用示例
假设我们需要生成10个猜拳游戏中的随机手势(剪刀、石头、布),并且我们想要产生的这10个手势序列每次执行都相同,那么我们可以这样写:
import random
random.seed(100)
for i in range(10):
# 产生随机手势
gesture = random.choice(['剪刀', '石头', '布'])
print(gesture)
以上代码中,我们将种子设置为100,每次执行的输出都是相同的:
剪刀
布
布
石头
布
石头
石头
石头
石头
布
五、随机种子的好处
除了上述示例中提到的需要多次生成相同随机数序列的情况,还有以下好处:
1. 在测试中使用相同的随机种子可以保证测试结果的一致性;
2. 使用相同的随机种子可以产生“伪随机数”序列,这对于一些需要具有随机性的算法,如遗传算法,尤为有用。
六、随机种子的注意事项
1. 在开发互联网应用时,不要使用随机种子来生成随机ID或密码等,因为容易产生安全问题。
2. 随机数模块不是线程安全的,如果多线程中使用了相同的随机数生成器,那么需要在不同线程中使用不同的实例。