【发布时间】:2017-05-02 09:26:20
【问题描述】:
Python的模块uuid的uuid4()函数会生成一个随机的UUID,而且好像每次都生成一个不同的:
In [1]: import uuid
In [2]: uuid.uuid4()
Out[2]: UUID('f6c9ad6c-eea0-4049-a7c5-56253bc3e9c0')
In [3]: uuid.uuid4()
Out[3]: UUID('2fc1b6f9-9052-4564-9be0-777e790af58f')
我希望能够在每次运行脚本时生成相同的随机 UUID - 也就是说,我希望在 uuid4() 中播种随机生成器。有没有办法做到这一点? (或者通过其他方式实现)?
到目前为止我已经尝试过什么
我必须使用 uuid.UUID() 方法生成一个 UUID,并使用随机 128 位整数(来自 random.Random() 的种子实例)作为输入:
import uuid
import random
rd = random.Random()
rd.seed(0)
uuid.UUID(rd.getrandbits(128))
但是,UUID() 似乎不接受这个作为输入:
Traceback (most recent call last):
File "uuid_gen_seed.py", line 6, in <module>
uuid.UUID(rd.getrandbits(128))
File "/usr/lib/python2.7/uuid.py", line 133, in __init__
hex = hex.replace('urn:', '').replace('uuid:', '')
AttributeError: 'long' object has no attribute 'replace'
还有其他建议吗?
【问题讨论】:
-
它显然需要某种字符串,
hex的提及表明您可以通过调用hey(rd.getrandbits(128))来获取它。但是,您最终不会得到 uuid4。 -
你需要一种方法来产生一个随机的十六进制数字(小写)。您需要第二种方法从 {8, 9, a, b} 中产生随机选择。将它们按正确的顺序放在一起,加上字符“-”和“4”,您就可以制作自己的 UUID4 方法。