首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为测试播种随机生成器

为测试播种随机生成器
EN

Stack Overflow用户
提问于 2021-01-03 12:58:51
回答 1查看 305关注 0票数 0

我使用factory-boyget_random_state/set_random_state实现了它,虽然这并不容易。最大的缺点是它的值很大。所以我想到的就是把它写到一个文件中。但是如果我不小心运行了测试,没有告诉它从文件中产生种子,这个值就会丢失。现在我想起来,我也可以显示这个值(想想tee)。但我仍然想把它减少到4-5位。

我的想法如下。通常,当您运行测试时,它会在某处显示"seed: 4215“。然后,为了重现相同的结果,我必须执行SEED=4215 ./manage.py test之类的操作。

我用factory-boy做了一些实验,但后来我意识到即使使用random模块本身也无法做到这一点。我尝试了不同的想法。到目前为止,他们都失败了。最简单的是:

代码语言:javascript
复制
import random
import os
if os.getenv('A'):
    random.seed(os.getenv('A'))
else:
    seed = random.randint(0, 1000)
    random.seed(seed)
    print('seed: {}'.format(seed))
print(random.random())
print(random.random())
代码语言:javascript
复制
/app $ A= python a.py
seed: 62
0.9279915658776743
0.17302689004804395

/app $ A=62 python a.py
0.461603098412836
0.7402019819205794

为什么结果会有所不同?如何让它们变得平等?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-03 13:19:08

当前您的类型不同:

代码语言:javascript
复制
if os.getenv('A'):
    random.seed(os.getenv('A'))
else:
    seed = random.randint(0, 1000)
    random.seed(seed)
    print('seed: {}'.format(seed))

在第一种情况下,您有一个str,在第二种情况下,您有一个int。您可以通过在第一种情况下强制转换int来解决此问题:

random.seed(int(os.getenv("A")))

我也没有完全按照您的需要直接播种random;我认为在Factory Boy中,您可以使用factory.random.reseed_random (source)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65546784

复制
相关文章

相似问题

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