Django中的随机数初始化
在Django的视图中,我使用了random.random()
这个函数。那么我需要多频繁地调用一下random.seed()
呢?
是每次请求的时候调用一次吗?
还是每个季节调用一次?
还是在网络服务器运行的时候只需要调用一次就行?
3 个回答
0
这其实要看你需要随机数做什么。你可以试着实验一下,看看这样做是否有区别。你还应该考虑到,伪随机数其实是有一定规律的。如果有人能猜到下一个随机数,这对你来说重要吗?如果不重要的话,可以在会话开始时或者服务器启动时只设置一次种子。
我觉得在会话开始时只设置一次种子是最合理的。这样用户在整个会话中会得到一组伪随机数。如果你每次页面加载时都设置种子,他们就不能保证得到这一组随机数了。
4
不要设置种子。
只有在你想确保相同的事件一直发生时,才需要设置种子。比如说,如果你不想让玩家在游戏中作弊,你可以保存这个种子,然后在他们加载游戏时再设置它。这样无论他们保存和重新加载多少次,结果都会是一样的。
3
尽量少调用 random.seed()
,如果可以的话就不要调用。
要让数字看起来随机,你必须让随机数生成器自由运行,而不去碰种子(seed)。生成的数字序列才是真正的随机。如果你改变了种子,就会开始一个新的数字序列。而且,种子的值可能并不那么随机,这样会导致一些问题。
根据你需要生成的数字数量,你可以考虑定期从 /dev/random
重置种子。
你应该在用完之前的种子之前尝试重置种子。因为你并不能获得完整的32位随机性,所以在生成了大约2的28次方(即268,435,456)个数字后,你可能想要重置种子。