web-dev-qa-db-fra.com

fonction n'est pas définie erreur en Python

J'essaie de définir une fonction de base en python mais j'obtiens toujours l'erreur suivante lorsque j'exécute un programme de test simple;

>>> pyth_test(1, 2)

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    pyth_test(1, 2)
NameError: name 'pyth_test' is not defined

Voici le code que j'utilise pour cette fonction;

def pyth_test (x1, x2):
    print x1 + x2

UPDATE: J'ai le script appelé pyth.py ouvert, puis je tape pyth_test (1,2) dans l'interpréteur lorsqu'il génère l'erreur. 

Merci pour l'aide. (Je m'excuse pour la question de base, je n'ai jamais programmé auparavant et j'essaie d'apprendre le python comme passe-temps.)


import sys
sys.path.append ('/Users/clanc/Documents/Development/')
import test


printline()



## (the function printline in the test.py file
##def printline():
##   print "I am working"
22
Lance Collins

Oui, mais dans quel fichier la définition de pyth_test est-elle déclarée? Est-il également situé avant de l'appeler?

Modifier:

Pour le mettre en perspective, créez un fichier appelé test.py avec le contenu suivant:

def pyth_test (x1, x2):
    print x1 + x2

pyth_test(1,2)

Maintenant, lancez la commande suivante:

python test.py

Vous devriez voir la sortie que vous désirez. Maintenant, si vous êtes dans une session interactive, cela devrait se passer comme ceci:

>>> def pyth_test (x1, x2):
...     print x1 + x2
... 
>>> pyth_test(1,2)
3
>>> 

J'espère que cela explique le fonctionnement de la déclaration.


Pour vous donner une idée du fonctionnement de la mise en page, nous allons créer quelques fichiers. Créez un nouveau dossier vide pour garder les choses propres avec les éléments suivants:

myfunction.py

def pyth_test (x1, x2):
    print x1 + x2 

program.py

#!/usr/bin/python

# Our function is pulled in here
from myfunction import pyth_test

pyth_test(1,2)

Maintenant si vous courez:

python program.py

Il va imprimer 3. Maintenant, pour expliquer ce qui ne va pas, modifions notre programme de la manière suivante:

# Python: Huh? where's pyth_test?
# You say it's down there, but I haven't gotten there yet!
pyth_test(1,2)

# Our function is pulled in here
from myfunction import pyth_test

Voyons maintenant ce qui se passe:

$ python program.py 
Traceback (most recent call last):
  File "program.py", line 3, in <module>
    pyth_test(1,2)
NameError: name 'pyth_test' is not defined

Comme indiqué, python ne peut pas trouver le module pour les raisons décrites ci-dessus. Pour cette raison, vous devriez garder vos déclarations en haut.

Maintenant, si nous exécutons la session interactive Python:

>>> from myfunction import pyth_test
>>> pyth_test(1,2)
3

Le même processus s'applique. Maintenant, l’importation de paquets n’est pas si simple, je vous recommande donc de regarder comment les modules fonctionnent avec Python . J'espère que cela vous aide et bonne chance dans vos apprentissages!

33
onteria_

Ça marche pour moi:

>>> def pyth_test (x1, x2):
...     print x1 + x2
...
>>> pyth_test(1,2)
3

Assurez-vous de définir la fonction avant vous l'appelez.

2
AJ.

En python, les fonctions ne sont pas accessibles magiquement de partout (comme dans php, par exemple). Ils doivent être déclarés en premier. Donc cela fonctionnera:

def pyth_test (x1, x2):
    print x1 + x2

pyth_test(1, 2)

Mais ça ne va pas:

pyth_test(1, 2)

def pyth_test (x1, x2):
    print x1 + x2
1
bluepnume

Cela aiderait si vous montriez le code que vous utilisez pour le programme de test simple. Mettez directement dans l'interprète, cela semble fonctionner. 

>>> def pyth_test (x1, x2):
...     print x1 + x2
... 
>>> pyth_test(1, 2)
3
>>> 
0
zellio

si vous travaillez avec la version IDLE installée de Python

>>>def any(a,b):
...    print(a+b)
...
>>>any(1,2)
3
0
user4157134