首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python random.getstate()和random.setstate()

python random.getstate()和random.setstate()
EN

Stack Overflow用户
提问于 2018-01-29 15:38:01
回答 1查看 7.2K关注 0票数 9

在这里学习模块随机,在一开始就有记账功能,我知道设置一个特定的种子就是确保获得相同的随机数。

但是,getstate()setsate()呢?在文档中,它没有介绍这个状态的含义,如果我不知道它意味着什么,我如何才能正确地设置它呢?

random.getstate() 返回捕获生成器当前内部状态的对象。可以将此对象传递给setstate()以恢复状态。 random.setstate(state) 状态应该是从以前对getstate()的调用中获得的,setstate()将生成器的内部状态恢复到调用getstate()时的状态。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-29 15:44:40

为什么不试试呢?

代码语言:javascript
复制
import random

random.seed(42)

print(random.sample(range(20),k=10))

st = random.getstate()  # remeber this state 

print(random.sample(range(20),k=20)) # print 20

random.setstate(st)     # restore state

print(random.sample(range(20),k=10)) #print same first 10

输出:

代码语言:javascript
复制
[12, 0, 4, 3, 11, 10, 19, 1, 5, 18]
[4, 9, 0, 3, 10, 8, 16, 7, 18, 17, 14, 6, 2, 1, 5, 11, 15, 13, 19, 12]
[4, 9, 0, 3, 10, 8, 16, 7, 18, 17]

很明显,如果您得到一个状态并恢复它,您可以返回并一次又一次地复制相同的值。

你不能在两者之间使用不同的随机画,或者你可以改变状态。

代码语言:javascript
复制
random.setstate(st) # go back again

print(random.sample(range(99),k=2)) # do something different
print(random.sample(range(20),k=18))

输出:

代码语言:javascript
复制
[21, 50]      # something different after setting state
[0, 3, 11, 9, 18, 8, 17, 19, 16, 7, 15, 1, 10, 2, 12, 5, 13, 14] # changed values
代码语言:javascript
复制
import random
import timeit

t1 = timeit.timeit(stmt = """random.seed(42)
random.randint(1,10)""",number=10000,setup="import random")

t2 = timeit.timeit(stmt = """
random.randint(1,10)
random.setstate(s)""",number=10000,setup="""import random
s = random.getstate()""")

print(t1,t2) 

输出:

代码语言:javascript
复制
# seed() time           setstate() time
0.5621587821914207      0.49502014443357545
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48504854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档