gpt4 book ai didi

python - python的_random是什么?

转载 作者:太空狗 更新时间:2023-10-29 20:49:05 25 4
gpt4 key购买 nike

如果你打开 random.py 看看它是如何工作的,它的类 Random_random.Random 的子类:

import _random

class Random(_random.Random):
"""Random number generator base class used by bound module functions.

Used to instantiate instances of Random to get generators that don't
share state. Especially useful for multi-threaded programs, creating
a different instance of Random for each thread, and using the jumpahead()
method to ensure that the generated sequences seen by each thread don't
overlap.

Class Random can also be subclassed if you want to use a different basic
generator of your own devising: in that case, override the following
methods: random(), seed(), getstate(), setstate() and jumpahead().
Optionally, implement a getrandbits() method so that randrange() can cover
arbitrarily large ranges.

"""

我可以通过以下操作轻松找到文件 random.py:

In [1]: import sys
In [2]: print random.__file__
/usr/lib/python2.7/random.pyc

然而 _random 没有这个变量:

In [3]: _random.__file__
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-295-a62b7df330e2> in <module>()
----> 1 _random.__file__

AttributeError: 'module' object has no attribute '__file__'

那么什么是_randomrandom为什么要继承它,在哪里可以找到它对应的文件?

最佳答案

在 C 中实现的模块使用前导下划线是一种常见的做法。通常是模式 _mod对于这个 C 模块和 mod对于导入此 _mod 的 Python 模块用来。您会在标准库的几个模块中找到它。通常,您应该使用 mod而不是 _mod .

在 Mac OS X 上有一个文件:

_random.so

在 Python 使用的共享库目录中。

只需在交互式提示符下键入模块名称即可查看路径:

>>> _random
>>> <module '_random' from '/path/to/python/sharedlibs/_random.so'>

顺便说一句,并非所有您可以导入的模块都有与之关联的文件。有些是 Python 可执行文件的一部分,内置模块:

>>> import sys
>>> sys.builtin_module_names
('_ast', '_codecs', '_collections', '_functools', '_imp', '_io', '_locale',
'_operator', '_signal', '_sre', '_stat', '_string', '_symtable', '_thread',
'_tracemalloc', '_warnings', '_weakref', 'atexit', 'builtins', 'errno',
'faulthandler', 'gc', 'itertools', 'marshal', 'posix', 'pwd', 'sys',
'time', 'xxsubtype', 'zipimport')

因此,如果您进入您的平台:

>>> _random
_random <module '_random' (built-in)>

_random是 Python 可执行文件本身的一部分。

在C源中_randommodule.c你可以找到Random的方法可在 Python 中使用:

static PyMethodDef random_methods[] = {
{"random", (PyCFunction)random_random, METH_NOARGS,
PyDoc_STR("random() -> x in the interval [0, 1).")},
{"seed", (PyCFunction)random_seed, METH_VARARGS,
PyDoc_STR("seed([n]) -> None. Defaults to current time.")},
{"getstate", (PyCFunction)random_getstate, METH_NOARGS,
PyDoc_STR("getstate() -> tuple containing the current state.")},
{"setstate", (PyCFunction)random_setstate, METH_O,
PyDoc_STR("setstate(state) -> None. Restores generator state.")},
{"getrandbits", (PyCFunction)random_getrandbits, METH_VARARGS,
PyDoc_STR("getrandbits(k) -> x. Generates an int with "
"k random bits.")},
{NULL, NULL} /* sentinel */
};

比较:

>>> [x for x in dir(_random.Random) if not x.startswith('__')]
['getrandbits', 'getstate', 'jumpahead', 'random', 'seed', 'setstate']

关于python - python的_random是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41473958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com