J'ai des problèmes avec la fonction d'importation aléatoire de Python. Il semble que import random
et from random import random
importent des choses différentes. J'utilise actuellement 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'
>>>
import random
importe le random module , qui contient diverses tâches relatives à la génération de nombres aléatoires. Parmi ceux-ci, la fonction random () function , qui génère des nombres aléatoires compris entre 0 et 1.
Pour importer de cette manière, vous devez utiliser la syntaxe random.random()
.
La fonction aléatoire peut également être importée du module séparément:
from random import random
Cela vous permet d'appeler simplement random()
directement.
Le module random contient une fonction nommée random()
; vous devez donc savoir si vous avez importé le module dans votre espace de noms ou si vous avez importé des fonctions du module.
import random
importera le module aléatoire alors que from random import random
importera spécifiquement la fonction aléatoire à partir du module.
Vous pourrez donc effectuer l’une des opérations suivantes:
import random
a = random.random()
b = random.randint(1, 5)
# you can call any function from the random module using random.<function>
ou...
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
Le problème est qu’il ya deux choses appelées aléatoires ici: l’une est le module lui-même et l’autre est une fonction dans ce module. Vous ne pouvez pas avoir deux choses avec le même nom dans votre espace de noms, vous devez donc choisir l'une ou l'autre.
import random
inclut le module dans l’espace de noms sous le nom 'random'.
from random import random
inclut la fonction 'aléatoire' de l'espace de noms 'aléatoire' dans l'espace de noms global.
Ainsi, dans le premier exemple, vous appelez random.random et dans le second, aléatoirement. Les deux accéderaient à la même fonction.
De même,
from random import randint
importerait randint dans l’espace de noms global, vous pourrez donc simplement appeler randint au lieu de random.randint.
Eh bien, oui, ils importent des choses différentes. import random
importe le module random
, from random import random
importe la fonction random
à partir du module random
. C’est en fait un bon exemple de la raison pour laquelle lors de la conception d’une API en Python, il est souvent préférable d’éviter de nommer les modules et leurs membres de la même manière.
Le module 'random' est un paquet de la bibliothèque standard Python, ainsi qu'une fonction définie dans ce paquet.
Utiliser 'import random' permet d'importer le package, que vous pouvez ensuite utiliser avec la fonction de ce package: 'random.random ()'. Vous pouvez également utiliser toute autre fonction du paquetage «aléatoire».
Vous pouvez également demander à python d'importer spécifiquement uniquement la fonction aléatoire du paquet random: 'from random import random'. Ensuite, vous ne pouvez utiliser que la fonction 'random ()', et vous ne devez pas spécifier le paquet dont il provient. Cependant, vous ne pouvez utiliser aucune autre fonction du paquetage aléatoire, car elles n'ont pas été importées si vous utilisez 'from random random random'.
Vous devez importer la fonction aléatoire fonction à partir du module aléatoireavant de pouvoir l'utiliser.
In [1]: from random import random
In [2]: random()
Out[2]: 0.5607917948041573
Si vous utilisez PyDev ou un autre IDE intelligent, assurez-vous qu'il n'a pas importé le module automatiquement, ce qui annule votre importation. Cela peut être particulièrement déroutant ici, lorsque le nom du module est égal à un nom de fonction, car l'erreur renvoyée n'est pas une NameError
. Dans mon cas j'ai ajouté
import random
et plus tard utilisé:
r = random.radom()
mais j'ai:
AttributeError: 'builtin_function_or_method' object has no attribute 'random'
Ce n’est qu’après une recherche que PyDev a ajouté automatiquement la ligne.
from random import random
jusqu’à la fin de mes importations, j’appelais donc l’attribut random
de la méthode random
. La solution consiste à supprimer l’importation automatique ou à l’utiliser et d’appeler directement la méthode random()
.
Si vous utilisez from random import random
, vous devez appeler randint () comme suit: randint(1,5)
. Si vous utilisez import random
, vous l’appelez ainsi: random.randint(1,5)
.