以下代码试图说明我想要的内容.我基本上想要两个"随机"的实例,它们彼此独立地运行.我想在一个类中种子"随机"而不影响另一个类中的"随机".我怎样才能做到这一点?
class RandomSeeded:
def __init__(self, seed):
import random as r1
self.random = r1
self.random.seed(seed)
def get(self):
print self.random.choice([4,5,6,7,8,9,2,3,4,5,6,7,])
class Random:
def __init__(self):
import random as r2
self.random = r2
self.random.seed()
def get(self):
print self.random.choice([4,5,6,7,8,9,2,3,4,5,6,7,])
if __name__ == '__main__':
t = RandomSeeded('asdf')
t.get() # random is seeded within t
s = Random()
s.get()
t.get() # random should still be seeded within t, but is no longer
Run Code Online (Sandbox Code Playgroud) Python的随机似乎是全局的,因此更改它的模块将相互影响.
虽然当然有许多第三方模块,但有没有办法使用Python的标准库在上下文中包含一个本地随机数.
(不使用random.get/setstate,在混合来自不同模块的代码时可能会出现问题).
就像是...
r = random.context(seed=42)
number = r.randint(10, 20)
Run Code Online (Sandbox Code Playgroud)
每个模块可以使用自己的随机上下文.