有时会发生我们缺乏数据并且需要相当快地组成一堆新示例的情况。当然,您可以花一些时间自己编写这些示例,但效率不高,对吧?将责任转移到您的计算机上会更有意义,即 Python 的内置模块random。在这个模块中,随机搜索用于生成元素,并使用以种子为起点的算法执行。因此,给出的结果根本不是随机的,从技术上讲,这个模块应该被称为pseudo-random。然而,它可能对大量应用有用,例如建模和仿真。
随机方法:第一步
首先,我们需要导入模块:
import random
在我们设法完成上一个任务之后,可以尝试random.random()
为我们提供从 0 到 1 的伪随机数的函数:
print(random.random()) # 0.5557276751294531
我们还可以通过手动指定种子来控制伪随机行为,即使用该random.seed(x)
函数配置新的伪随机数序列。您可以设置自己的数字或省略可选参数 x,因此默认情况下将使用当前系统时间。
random.seed()
print(random.random()) # 0.956177930864557
现在尝试设置x参数。你没有注意到结果的变化吗?如果你选择5, 你会得到 0.6229016948897019 结果,如果 20 – 0.9056396761745207等。因此,种子控制 Python 中伪随机的行为,并且可以与随机模块的任何其他功能一起使用。
随机基本函数
展望未来,其他有用的功能是:
random.uniform(a, b)
– 返回一个介于 a 和 b 之间的伪随机浮点数:
print(random.uniform(3, 100)) # 35.94079523197162
random.randint(a, b)
–返回一个介于 a 和 b 之间的伪随机整数:
print(random.randint(35, 53)) # 52
random.choice(seq)
–从非空序列返回伪随机元素:
print(random.choice('Voldemort')) # m
random.randrange(a, b, c)
–从 a 和 b 之间的范围内返回一个伪随机数,步长为 c。就像range()
函数一样,可以分别使用默认值 0 和 1 省略start和step参数。这意味着该函数可以采用一个、两个或三个参数:
print(random.randrange(3, 100, 5)) # 18
print(random.randrange(1, 5)) # 2
print(random.randrange(100)) # 44
random.shuffle(seq)
– 打乱一个序列。注意:它不适用于不可变数据类型!
tiny_list = ['a', 'apple', 'b', 'banana', 'c', 'cat']
random.shuffle(tiny_list)
print(tiny_list) # ['apple', 'banana', 'a', 'cat', 'b', 'c']
random.sample(population, k)
– 从种群序列中返回一个伪随机 k 长度列表。该函数用于无放回随机抽样:
print(random.sample(range(100), 3)) # [24, 33, 91]
此外,还有许多其他函数用于常见的数学实践,例如random.gammavariate(alpha, beta)
用于伽马分布或random.gauss(mu, sigma)
返回高斯分布的函数。如果您需要这种狭义的功能,您可以参考Python 文档。
random
模块的伪随机生成器不应用于安全目的。如果您打算使用密码、安全令牌和其他敏感数据,请查看secrets模块。它被认为更可靠,因为它会生成安全的随机数。
概括
总而言之,在本主题中,我们仔细研究random
了 Python 标准库中的模块及其基本功能。现在您可以自己在项目中使用它!