Python 3的random.SystemRandom.randint中是否有错误,或者我使用不正确?

Hen*_*orn 8 python random

>>> import random
>>> random.SystemRandom.randint(0, 10)
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    random.SystemRandom.randint(0, 10)
TypeError: randint() missing 1 required positional argument: 'b'
Run Code Online (Sandbox Code Playgroud)

SystemRandom应该给随机数不过os.urandom,randint就像正常的randrange:

>>> print(random.SystemRandom.randint.__doc__)
Return random integer in range [a, b], including both end points.
Run Code Online (Sandbox Code Playgroud)

在IDLE中,当我输入它时,会出现一个小弹出建议

`random.SystemRandom.randint(self, a, b)`
Run Code Online (Sandbox Code Playgroud)

我认为这是原因.我不是很擅长使用类并理解它们是如何工作的,但第一个参数似乎正在被传递self,应该是什么时候a.我从来没有真正理解为什么self在它甚至不是关键字时使用,以及它应该如何才能正常工作,但它通常会这样做.

我这样做错了,或者我应该在每次应该做这样的事情时向Python基金会报告这个问题?

lol*_*ter 8

我想你想要:

import random
r = random.SystemRandom()
print(r.randint(0, 10))
Run Code Online (Sandbox Code Playgroud)

代替.

这是因为您需要创建random.SystemRandom该类的实例.

但是,您可以轻松使用以下内容:

import random
random.randint(0, 10)
Run Code Online (Sandbox Code Playgroud)

如果您不需要依赖于操作系统的加密RNG.

  • 在模块级函数上使用“SystemRandom”与您是否需要单独的实例无关。`SystemRandom` 使用依赖于操作系统的加密 RNG,而 `random.randint` 仅使用 Mersenne Twister;选择使用哪个取决于您需要的 RNG 的强度。 (2认同)

Rol*_*ith 8

random.SystemRandom是一个班级.它需要实例化;

In [5]: foo = random.SystemRandom()

In [6]: foo.randint(0, 10)
Out[6]: 0
Run Code Online (Sandbox Code Playgroud)

完整的文档字符串给出了一个提示;

In [12]: random.SystemRandom.randint?
Signature: random.SystemRandom.randint(self, a, b)
Docstring: Return random integer in range [a, b], including both end points.
File:      /usr/local/lib/python3.4/random.py
Type:      function
Run Code Online (Sandbox Code Playgroud)

self参数表明,该randint是一个方法SystemRandom.