I'm having problems with Python's import random function. It seems that import random
and from random import random
are importing different things. I am currently using 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'
>>>
The random module contains a function named
random()
, so you need to be aware of whether you have imported the module into your namespace, or imported functions from the module.import random
will import the random module whereasfrom random import random
will specifically import the random function from the module.So you will be able to do one of the following:
or...
import random
imports the random module, which contains a variety of things to do with random number generation. Among these is the random() function, which generates random numbers between 0 and 1.Doing the import this way this requires you to use the syntax
random.random()
.The random function can also be imported from the module separately:
This allows you to then just call
random()
directly.If you are using PyDev or other clever IDE, make sure it did not import the module automatically, overriding your import. It can be especially confusing here, when module name is equal to a function name, because the error thrown is not a
NameError
. In my case I addedand later used it:
but got:
Only after searching I found that PyDev automatically added the line
to the end of my imports, so I was in fact calling attribute
random
of methodrandom
. Solution is to delete the automatic import or use it and call therandom()
method directly.