如何生成python中永远唯一的随机数

时间:2015-10-21 07:24:52

标签: python random

我编写了一个脚本,每次运行该脚本时我都需要一个唯一的随机数。只是为了解释:假设我想要我的脚本5次。现在我想要在所有时间生成的数字应该是唯一的吗?

我发现了很多关于随机数唯一性的信息,但这些只有一次。 如果您认为不可能,那么还有其他方法等吗?

2 个答案:

答案 0 :(得分:2)

您可以使用Exception: Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main status = self.run(options, args) File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 290, in run requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1178, in prepare_files url = finder.find_requirement(req_to_install, upgrade=self.upgrade) File "/usr/lib/python2.7/dist-packages/pip/index.py", line 194, in find_requirement page = self._get_page(main_index_url, req) File "/usr/lib/python2.7/dist-packages/pip/index.py", line 568, in _get_page session=self.session, File "/usr/lib/python2.7/dist-packages/pip/index.py", line 694, in get_page req, link, "connection error: %s" % exc, url, TypeError: __str__ returned non-string (type Error) Storing debug log for failure in /root/.pip/pip.log 生成RFC 4122 UUID(通用唯一标识符)。例如,uuid4生成随机UUID:

uuid

要获取该号码,请访问In [1]: import uuid In [2]: u = uuid.uuid4() In [3]: u Out[3]: UUID('deb1064a-e885-4ebc-9afc-f5291120edf8') uuid.UUID个对象:

In [4]: u.int
Out[4]: 242844464987419882393579831900689854160

答案 1 :(得分:1)

独特和随意是矛盾的。对于任何真正随机的东西,都有(小的,可能无限的)重复的机会。

如果你想要比UUID更不笨(但不那么普遍唯一)的东西,你可以自己组合一个随机数(重复的可能性很小)和从时间推导出的数字(例如Unix时代,如果脚本运行频率低于每秒​​一次,则不会重复单个实例。

如果随机数用作(例如)文件名的一部分,您可以生成名称,然后检查该文件是否已存在。如果是,则拒绝已使用的随机数,并生成另一个。或者如果你真的需要,你可以存储已经在某处使用过的所有随机数。在每次运行之前加载它们,添加新数字并在每次运行后保存。

最后有伪 - "随机"形式为X(n + 1)=(X(n)* a + b)mod M的生成器。这对于安全性/加密技术是没有希望的,因为给定序列的一些成员,您可以发现算法并预测所有未来的数字。但是,如果这种可预测性不重要,那么使用适当的常数,您可以保证在生成序列的所有M个成员之前不重复。这些数字并不是随机的,但对于不经意的观察者来说,这些数字可能是随机的。