第五章:数学运算-random:伪随机数生成器-保存状态

5.3.3 保存状态
random()使用的伪随机算法的内部状态可以保存,并用于控制后续生成的随机数。如果在继续生成随机数之前恢复前一个状态,则会减少出现重复的可能性,则避免出现之前输入中重复的值或值序列。getstate()函数返回一些数据,以后可以借助setstate()利用这些数据重新初始化伪随机数生成器。

import random
import os
import pickle

if 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-know start state.
    print('No state.dat,seeding')
    random.seed(1)

# Produce random values.
for i in range(3):
    print('{:04.3f}'.format(random.random()),end=' ')
print()

# Save state for next time.
with open('state.dat','wb') as f:
    pickle.dump(random.getstate(),f)

# Produce more random values.
print('\nAfter saving state:')
for i in range(3):
    print('{:04.3f}'.format(random.random()),end=' ')
print()

getstate()返回的数据是一个实现细节,所以这个例子用pickle将数据保存到一个文件;否则,它会把伪随机生成器当作一个黑盒。如果程序开始时这个文件存在,则加载原来的状态并继续。每次运行时都会在保存状态之前和之后生成一些数,以展示恢复状态会使生成器再次生成同样的值。
运行结果:
在这里插入图片描述
注: 请运行两次结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值