第五章:数学运算-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将数据保存到一个文件;否则,它会把伪随机生成器当作一个黑盒。如果程序开始时这个文件存在,则加载原来的状态并继续。每次运行时都会在保存状态之前和之后生成一些数,以展示恢复状态会使生成器再次生成同样的值。
运行结果:
在这里插入图片描述
注: 请运行两次结果。

猜你喜欢

转载自blog.csdn.net/weixin_43193719/article/details/88042777
今日推荐