<p>我将使用一个文件来避免<code>global</code>,并将数据和逻辑稍微分开。在</p>
<p><strong>种子_处理程序.py</strong></p>
<pre><code># file that stores the shared seed value
seed_val_file = "seed_val.txt"
def save_seed(val, filename=seed_val_file):
""" saves val. Called once in simulation1.py """
with open(filename, "wb") as f:
f.write(str(val))
def load_seed(filename=seed_val_file):
""" loads val. Called by all scripts that need the shared seed value """
with open(filename, "rb") as f:
# change datatype accordingly (numpy.random.random() returns a float)
return int(f.read())
</code></pre>
<p><strong>模拟1.py</strong></p>
^{pr2}$
<p><strong>模拟2.py</strong></p>
<pre><code>import random
import seed_handler
def sim2():
""" loads the old seed and prints a deterministic "random" number """
old_seed = seed_handler.load_seed()
print "Old seed:", old_seed
# do the actual seeding of the pseudo-random number generator
random.seed(old_seed)
# the result
print "Random: ", random.random()
if __name__ == "__main__":
sim2()
</code></pre>
<p>输出:</p>
<pre><code>user@box:~/$ python simulation1.py
New seed: 3735928559
Random: 0.0191336454935
user@box:~/$ python simulation2.py
Old seed: 3735928559
Random: 0.0191336454935
</code></pre>
<p>补遗</p>
<p>我刚在评论中看到这是为了研究。目前,执行simulation1.py会覆盖存储的种子值;这可能是不可取的。可以添加以下功能之一:</p>
<ol>
<li>另存为json并加载到字典;这样就什么都没有了
会被覆盖,每个种子值都可以有注释、时间戳和
与之关联的用户生成的标签。在</li>
<li>只需提示用户输入yes/no来覆盖
现有价值。在</li>
</ol>