在这里学习模块随机,在一开始就有记账功能,我知道设置一个特定的种子就是确保获得相同的随机数。
但是,getstate()和setsate()呢?在文档中,它没有介绍这个状态的含义,如果我不知道它意味着什么,我如何才能正确地设置它呢?
random.getstate() 返回捕获生成器当前内部状态的对象。可以将此对象传递给setstate()以恢复状态。 random.setstate(state) 状态应该是从以前对getstate()的调用中获得的,setstate()将生成器的内部状态恢复到调用getstate()时的状态。
谢谢,
发布于 2018-01-29 15:44:40
为什么不试试呢?
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输出:
[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]很明显,如果您得到一个状态并恢复它,您可以返回并一次又一次地复制相同的值。
你不能在两者之间使用不同的随机画,或者你可以改变状态。
random.setstate(st) # go back again
print(random.sample(range(99),k=2)) # do something different
print(random.sample(range(20),k=18))输出:
[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 valuesimport 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) 输出:
# seed() time setstate() time
0.5621587821914207 0.49502014443357545https://stackoverflow.com/questions/48504854
复制相似问题