Python随机函数

时间:2013-02-20 17:12:10

标签: python random import

我遇到Python的导入随机函数问题。似乎import randomfrom random import random正在导入不同的内容。我目前正在使用Python 2.7.3

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> random()

Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
    random()
NameError: name 'random' is not defined
>>> random.randint(1,5)

Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
random.randint(1,5)
NameError: name 'random' is not defined
>>> import random
>>> random()

Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
random()

TypeError: 'module' object is not callable
>>> random.randint(1,5)
2
>>> from random import random
>>> random()
0.28242411635200193
>>> random.randint(1,5)

Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
random.randint(1,5)
AttributeError: 'builtin_function_or_method' object has no attribute 'randint'
>>> 

9 个答案:

答案 0 :(得分:24)

import random导入随机模块,其中包含与随机数生成相关的各种操作。其中包括random()函数,它生成0到1之间的随机数。

以这种方式进行导入,这要求您使用语法random.random()

随机功能也可以单独从模块导入:

from random import random

这样您就可以直接拨打random()

答案 1 :(得分:15)

random module包含一个名为random()的函数,因此您需要知道是否已将模块导入命名空间或从模块导入函数。

import random将导入随机模块,而from random import random将专门从模块导入随机函数。

因此,您可以执行以下操作之一:

import random
a = random.random()
b = random.randint(1, 5)
# you can call any function from the random module using random.<function>

...或

from random import random, randint   # add any other functions you need here
a = random()
b = randint(1, 5)
# those function names from the import statement are added to your namespace

答案 2 :(得分:9)

问题是这里有两个叫做随机的东西:一个是模块本身,一个是该模块中的一个函数。在命名空间中不能有两个具有相同名称的东西,因此您必须选择其中一个。

答案 3 :(得分:5)

import random 

将模块包含在命名为'random'的命名空间中。

from random import random

包括从命名空间“随机”到全局命名空间的函数“随机”。

所以在第一个例子中,你会调用random.random,而在第二个例子中,你会调用random。两者都可以访问相同的功能。

类似地,

from random import randint

会将randint导入全局命名空间,因此您只需调用randint而不是random.randint。

答案 4 :(得分:3)

嗯,是的,他们导入了不同的东西。 import random导入random模块,from random import randomrandom模块导入random函数。这实际上是一个很好的例子,为什么在Python中设计API时,尝试避免将模块及其成员命名为同样的事情通常是一个好主意。

答案 5 :(得分:1)

'random'模块是python标准库中的一个包,以及此包中定义的函数。

使用'import random'导入包,然后您可以使用此包中的函数:'random.random()'。您也可以使用“随机”包中的任何其他功能。

你也可以让python专门从随机包中随机导入随机函数:'from random import random'。然后你只能使用函数'random()',而不应该指定它来自的包。但是,您不能使用随机包中的任何其他功能,因为如果您使用'来自随机导入随机',则尚未导入它们。

答案 6 :(得分:0)

如果您使用from random import random,则必须像这样调用randint():randint(1,5)。如果您使用import random,则可以这样称呼:random.randint(1,5)

答案 7 :(得分:0)

如果您使用的是PyDev或其他聪明的IDE,请确保它不会自动导入模块,从而覆盖导入。当模块名称等于函数名称时,这可能会特别令人困惑,因为抛出的错误不是NameError。在我的情况下,我添加了

import random

后来用它:

r = random.radom()

但得到了:

AttributeError: 'builtin_function_or_method' object has no attribute 'random'

只有在搜索后才发现PyDev自动添加了这行

from random import random

到我导入的结尾,所以我实际上是调用方法random的属性random。解决方法是删除自动导入或使用它并直接调用random()方法。

答案 8 :(得分:0)

您必须先从随机模块中导入随机函数,然后才能使用它

In [1]: from random import random

In [2]: random()
Out[2]: 0.5607917948041573