作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
说我有一些python代码:
import random
r=random.random()
最佳答案
遵循da代码。
要查看random
模块在系统中的“位置”,您可以在终端中执行以下操作:
>>> import random
>>> random.__file__
'/usr/lib/python2.7/random.pyc'
.pyc
(“已编译”)文件的路径,该文件通常与可以找到可读代码的原始
.py
并排放置。
/usr/lib/python2.7/random.py
中发生了什么:
Random
类的实例,然后(在文件底部)“将该”实例的方法“提升”为模块功能。整洁的把戏。当将
random
模块导入任何地方时,将创建该
Random
类的新实例,然后初始化其值并将方法重新分配为模块的功能,从而使其在每次导入时都相当随机(erm ...或每个Python解释器实例)的基础。
_inst = Random()
seed = _inst.seed
random = _inst.random
uniform = _inst.uniform
triangular = _inst.triangular
randint = _inst.randint
Random
类在其
__init__
方法中所做的唯一事情是将其作为种子:
class Random(_random.Random):
...
def __init__(self, x=None):
self.seed(x)
...
_inst = Random()
seed = _inst.seed
x
是
None
(未指定种子)会发生什么?好吧,让我们检查
self.seed
方法:
def seed(self, a=None):
"""Initialize internal state from hashable object.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If a is not None or an int or long, hash(a) is used instead.
"""
if a is None:
try:
a = long(_hexlify(_urandom(16)), 16)
except NotImplementedError:
import time
a = long(time.time() * 256) # use fractional seconds
super(Random, self).seed(a)
self.gauss_next = None
_urandom(16)
到底是什么呢?
random.py
文件的开头:
from os import urandom as _urandom
from binascii import hexlify as _hexlify
random
模块使用的种子与执行操作相同:
>>> long(binascii.hexlify(os.urandom(16)), 16)
46313715670266209791161509840588935391L
random
函数并不是真正的“随机”……它们只是一个非常奇怪的数字序列。但是给定相同的种子,该顺序将是相同的。您可以自己尝试:
>>> import random
>>> random.seed(1)
>>> random.randint(0,100)
13
>>> random.randint(0,100)
85
>>> random.randint(0,100)
77
1
,您将始终获得整数
13
,
85
,
77
...某种程度上打败了目的(有关伪随机数生成的信息,请参见
this)另一方面,在
use cases中,这实际上可能是理想的功能。
/dev/urandom
(这是Python的
os.urandom
实际上在内部使用的),不同之处在于
/dev/random
(如前所述)使用硬件中断来生成随机序列。如果没有中断,
/dev/random
可能会用尽,您可能需要稍等片刻,直到获得下一个随机数。
/dev/urandom
在内部使用
/dev/random
,但可以保证始终为您准备好随机数。
cat /dev/random
(并准备按Ctrl + C,因为它将开始真正非常随机地输出内容)
borrajax@borrajax:/tmp$ cat /dev/random
_+�_�?zta����K�����q�ߤk��/���qSlV��{�Gzk`���#p$�*C�F"�B9��o~,�QH���ɭ�f��̬po�2o�(=��t�0�p|m�e
���-�5�߁ٵ�ED�l�Qt�/��,uD�w&m���ѩ/��;��5Ce�+�M����
~ �4D��XN��?ס�d��$7Ā�kte▒s��ȿ7_���- �d|����cY-�j>�
�b}#�W<դ���8���{�1»
. 75���c4$3z���/̾�(�(���`���k�fC_^C
random
模块潜在的弱点是使用它的时候:
time.time
总是报告同一时间(基本上是一个坏时钟)random
模块的实际随机性,则可以直接转到
os.urandom
,也可以使用
pycrypto密码库中的随机数生成器。这些可能更随机。我说更多是因为...
关于Python:random.random()植入哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27284943/
我是一名学习程序员,我正在尝试学习 PHP。现在的重点是我在新项目中使用了大量的数据库连接。这是很多不同的数据库,需要不同的连接。 有没有人可以让我创建一个函数,让我像这样使用我的代码? Getdat
我正在开发一个简单的 iOS 9 应用程序(使用 Swift 和 Xcode 7.01),它使用 Timehop 风格的界面来显示与当天对应的数据,可以追溯到 X 年前。 我想在第一次运行时为我的
我需要为我的应用程序做方面。目前,我希望分面出现在搜索后的结果页面上。我是新来的,很抱歉我的英语不好,我是法语。 我有 2 个模型:Camping.rb 和 Caracteristiquetest.r
我是一名优秀的程序员,十分优秀!