Python:random.seed不同但randint生成相同的数字

时间:2018-05-23 13:01:09

标签: python python-3.x python-2.7

我面临一个非常独特的问题。

random.seed(123)

rg = PhoneMetadata.metadata_for_region(random.choice(('US', 'FR', 'IN', 'GB')))
pl = rg.mobile.possible_length
cc = rg.country_code

print(''.join(str(random.randint(0, 9)) for _ in range(pl[0])))
--3982597919

random.seed(345)

rg = PhoneMetadata.metadata_for_region(random.choice(('US', 'FR', 'IN', 'GB')))
pl = rg.mobile.possible_length
cc = rg.country_code

print(''.join(str(random.randint(0, 9)) for _ in range(pl[0])))
--3982597919

我给的是不同的种子号,但是输出给我的号码相同。它不会每次都发生,但我随机地面对这个问题。

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

  

任何帮助都会非常感激。

由于你已经排除了PhoneMetadata,一个调试帮助可能是保存每次调用的随机状态,并在出现问题时检查它。保存:

pickle.dump(random.getstate(), open(tempfile.mktemp(), "w"))

要恢复,请查看临时目录,按日期排序,并恢复最新的通道,比如说

random.setstate(pickle.load(open("/tmp/tmpQMWOE4")))

然后查看是否可以使用此状态重现行为。