Python “随机”到底是什么

Python “随机”到底是什么,python,random,Python,Random,我知道后一部分是一个可选的论点。但是它到底做什么呢。我不明白这是什么意思。 这是文件上的 random.random() 返回下一个随机浮点 数值在[0.0,1.0]范围内 我也看到了,这就是这个范围0,0,1,0的意思吗 random.shuffle(lst_shuffle, random.random) 第二个参数用于指定要使用的随机数生成器。如果您需要/拥有比random.random“更好”的东西,这可能很有用。安全敏感的应用程序可能需要使用加密安全的随机数生成器 random

我知道后一部分是一个可选的论点。但是它到底做什么呢。我不明白这是什么意思。 这是文件上的

random.random() 返回下一个随机浮点 数值在[0.0,1.0]范围内

我也看到了,这就是这个范围0,0,1,0的意思吗

    random.shuffle(lst_shuffle, random.random)

第二个参数用于指定要使用的随机数生成器。如果您需要/拥有比
random.random
“更好”的东西,这可能很有用。安全敏感的应用程序可能需要使用加密安全的随机数生成器

random.random
random.random()
之间的区别在于,第一个函数是对生成简单随机数的函数的引用,而第二个函数实际上调用了该函数

如果你有另一个随机数发生器,你想用,你可以说

Pseudorandom number generators
Most, if not all programming languages have libraries that include a pseudo-random
number generator. This generator usually returns a random number between 0 and 1 (not
including 1). In a perfect generator all numbers have the same probability of being selected but
in the pseudo generators some numbers have zero probability.
至于(默认生成器)在做什么,它使用一种称为的算法来创建一个介于0和1(不包括1)之间的看似随机的浮点数,该区间中的所有数字具有相同的可能性


间隔从0到1只是一种约定。

第二个参数用于指定要使用的随机数生成器。如果您需要/拥有比随机数更好的东西,这可能会很有用。随机数。安全敏感的应用程序可能需要使用加密安全的随机数生成器

random.random
random.random()
之间的区别在于,第一个函数是对生成简单随机数的函数的引用,而第二个函数实际上调用了该函数

如果你有另一个随机数发生器,你想用,你可以说

Pseudorandom number generators
Most, if not all programming languages have libraries that include a pseudo-random
number generator. This generator usually returns a random number between 0 and 1 (not
including 1). In a perfect generator all numbers have the same probability of being selected but
in the pseudo generators some numbers have zero probability.
至于(默认生成器)在做什么,它使用一种称为的算法来创建一个介于0和1(不包括1)之间的看似随机的浮点数,该区间中的所有数字具有相同的可能性

间隔从0到1只是一种惯例。

文档继续说:

可选参数random是一个 返回随机变量的0参数函数 在[0.0,1.0]中浮动;默认情况下,此 函数是random()

这意味着您可以指定自己的随机数生成器函数,或者告诉模块使用默认的
random
函数

它期望的函数应该返回[0.0,1.0]范围内的浮点伪随机数,这意味着包含0.0,不包含1.0(即0.9999是要返回的有效数字,但1.0不是)。理论上,此范围内的每个数字都应该以相同的概率返回(即,这是一个线性分布).

医生继续说:

可选参数random是一个 返回随机变量的0参数函数 在[0.0,1.0]中浮动;默认情况下,此 函数是random()

这意味着您可以指定自己的随机数生成器函数,或者告诉模块使用默认的
random
函数


它期望的函数应该返回[0.0,1.0]范围内的浮点伪随机数,这意味着包含0.0,不包含1.0(即0.9999是要返回的有效数字,但1.0不是)。理论上,此范围内的每个数字都应该以相同的概率返回(即,这是一个线性分布).

洗牌函数依赖于RNG(随机数生成器),该生成器默认为Random.Random。第二个参数存在,因此您可以提供自己的RNG,而不是默认值

更新:

第二个参数是一个随机数生成器,每次调用它时,它都会生成一个范围为[0.0,1.0]的新随机数

下面是一个例子:

random.shuffle(x, my_random_number_function)

因此,如果函数总是返回相同的值,则始终得到相同的排列。如果函数每次调用时都返回随机值,则得到一个随机排列。

洗牌函数依赖于RNG(随机数生成器),默认值为random.random。第二个参数存在,因此您可以提供自己的RNG,而不是默认值

更新:

第二个参数是一个随机数生成器,每次调用它时,它都会生成一个范围为[0.0,1.0]的新随机数

下面是一个例子:

random.shuffle(x, my_random_number_function)
因此,如果函数始终返回相同的值,则始终会得到相同的排列。如果函数每次调用时都返回随机值,则会得到随机排列。

来自:

>>random.random()#随机浮点x,0.0来自:


>>random.random()#random float x,0.0第二个参数是函数,它被调用以生成随机数,然后用于洗牌序列(第一个参数)。如果不提供自己的参数,则使用默认函数random.random

如果要自定义执行洗牌的方式,可能需要提供此参数


您的自定义函数必须返回[0.0,1.0]-0.0(包括)和1.0(不包括)范围内的数字。

第二个参数是用来生成随机数的函数,该随机数依次用于洗牌序列(第一个参数)。如果您不提供自己的参数,则使用的默认函数是random.random

如果要自定义执行洗牌的方式,可能需要提供此参数


您的自定义函数必须返回范围为[0.0,1.0]-0.0(包括)和1.0(不包括)的数字。

现有答案很好地解决了问题的具体性,但我认为值得一提的是一个次要问题:为什么您特别想通过考试
$ python -mtimeit -s'import random' 'random.random()'
1000000 loops, best of 3: 0.214 usec per loop
>>> n = struct.calcsize('I')
>>> def s2i(s): return struct.unpack('I', s)[0]
... 
>>> maxi = s2i(b'\xff'*n) + 1
>>> maxi = float(s2i(b'\xff'*n) + 1)
>>> def rnd(): return s2i(os.urandom(n))/maxi