pythonrandom库⽣成随机数的⽅法_python模块介绍-
random:⽣成伪随机数
python模块介绍-random:⽣成伪随机数
概述
这个模块实现的伪随机数⽣成器。
对于整数,从区间选取。对于序列,随机元素。
有函数⽣成均匀的,正态分布(⾼斯),对数正态分布,负指数,γ和β分布的随机数。对于⾓度分布,可以使⽤Mises分布。
python生成1到100之间随机数⼏乎所有的函数依赖于基本函数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 ists('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.state(), 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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。