python random库生成随机数的方法_python模块介绍-random:生成伪随机数

python模块介绍-random:生成伪随机数

概述

这个模块实现的伪随机数生成器。

对于整数,从区间选取。对于序列,随机元素。

有函数生成均匀的,正态分布(高斯),对数正态分布,负指数,γ和β分布的随机数。对于角度分布,可以使用Mises分布。

几乎所有的函数依赖于基本函数random(),它生成区间[0.0, 1.0)的随机浮点。Python使用Mersenne Twister为核心的生成器。它生成53 bit精度的浮点值,周期为2的19937次方减1。 底层的C语言实现是快速和线程安全的。Mersenne Twister是目前最广泛的测试随机数生成器之一。然而因为生成的值是完全确定性的,所以不适合用于所有场合,尤其是加密。

该模块的函数实际上是random.Random类的隐藏实例random的方法。你可以实例化你自己Random来实现不共享状态的生成器。这对于多线程程序特别有用,为每个线程使用不同的实例,并使用jumpahead()方法使每个线程生成的序列不重叠。

类Random可以作为父类,random(), seed(), getstate(), setstate() and jumpahead()方法都可以重载。新生成器支持getrandbits()方法,允许randrange()方法在任意大区间中选择。

WichmannHill是Random的子类,用纯Python的实现了另外一个生成器。不推荐使用。

random模块还提供SystemRandom类使用系统函数os.urandom()产生随机数。

快速入门

>>> random.random() # Random float x, 0.0 <= x < 1.00.37444887175646646>>> random.uniform(1, 10) # Random float x, 1.0 <= x < 10.0 区间内的浮点数1.1800146073117523>>> random.randint(1, 10) # Integer from 1 to 10, endpoints included7>>> random.randrange(0, 101, 2) # Even integer from 0 to 100 Randrange不用生成range,会更高效26>>> random.choice('abcdefghij') # Choose a random element'c'>>> items = [1, 2, 3, 4, 5, 6, 7]>>> random.shuffle(items)>>> items[7, 3, 2, 5, 6, 4, 1]>>> random.sample([1, 2, 3, 4, 5], 3) # Choose 3 elements[4, 1, 5]

Seeding

Random()每次调用时会产生不同的值,设置了seed之后,就会产生有规律的恒定值。如果seed函数中没有提供参数, 就默认使用系统时间.

import randomrandom.seed(1)for i in xrange(5):

print '%04.3f' % random.random(),print

执行结果, 每次都产生一样的结果:

# python random_seed.py0.134 0.847 0.764 0.255 0.495

保存状态

random()使用的伪随机算法的内部状态可以保存起来并用于控制在后续运行中产生的数字以减少重复的值或值序列的可能。相关的函数为 getstate()和setstate()。random.seed 提供了随机数生成的起点,可以用来生成一样的随机数。默认为当前时间作为起点。随机生成的状态可以通过getstate()保存,通过 setstate()恢复。

import randomimport osimport cPickle as pickleif os.path.exists('state.dat'):

# Restore the previously saved state

print 'Found state.dat, initializing random module'

with open('state.dat', 'rb') as f:

state = pickle.load(f)

random.setstate(state)else:

# Use a well-known start state

print 'No state.dat, seeding'

random.seed(1)# Produce random valuesfor i in xrange(3):

print '%04.3f' % random.random(),print# Save state for next timewith open('state.dat', 'wb') as f:

pickle.dump(random.getstate(), f)# Produce more random valuesprint '\nAfter saving state:'for i in xrange(3):

print '%04.3f' % random.random(),print

执行结果:

# python random_state.pyFound state.dat, initializing random module0.255 0.495 0.449After saving state:0.652 0.789 0.094

本文地址

本站地址:python自动化测试外链网址已屏蔽 python开发自动化测试群113938272和开发测试群6089740 微博 外链网址已屏蔽

参考资料

英文文档主页:外链网址已屏蔽

《The Python Standard Library by Example 2011》

代码地址:Lib/random.py

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值