функция не определена ошибка в Python - PullRequest
27 голосов
/ 13 мая 2011

Я пытаюсь определить базовую функцию в python, но всегда получаю следующую ошибку при запуске простой тестовой программы:

>>> 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

Вот код, который я использую для этой функции;

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

ОБНОВЛЕНИЕ: у меня есть открытый скрипт pyth.py, а затем я пишу в интерпретаторе pyth_test (1,2), когда он выдает ошибку.

Спасибо за помощь. (Я прошу прощения за основной вопрос, я никогда не программировал прежде и пытаюсь изучить Python как хобби)


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"

Ответы [ 5 ]

36 голосов
/ 13 мая 2011

Да, но в каком файле объявлено определение pyth_test в? Он также находится до того, как называется?

Edit:

Чтобы представить его в перспективе, создайте файл с именем test.py со следующим содержимым:

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

pyth_test(1,2)

Теперь выполните следующую команду:

python test.py

Вы должны увидеть желаемый результат. Теперь, если вы находитесь в интерактивном сеансе, он должен выглядеть следующим образом:

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

Надеюсь, это объясняет, как работает декларация.


Чтобы дать вам представление о том, как работает макет, мы создадим несколько файлов. Создайте новую пустую папку, чтобы сохранить чистоту, с помощью следующего:

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)

Теперь, если вы запустите:

python program.py

Она выведет 3. Теперь, чтобы объяснить, что пошло не так, давайте изменим нашу программу следующим образом:

# 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

Теперь посмотрим, что произойдет:

$ 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

Как уже отмечалось, python не может найти модуль по причинам, изложенным выше. По этой причине вы должны держать свои объявления наверху.

Теперь, если мы запустим интерактивный сеанс Python:

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

Применяется тот же процесс. Теперь импорт пакетов не так прост, поэтому я рекомендую вам посмотреть, как модули работают с Python . Я надеюсь, что это поможет и удачи в изучении!

3 голосов
/ 13 мая 2011

у меня работает:

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

Убедитесь, что вы определили функцию до того, как вызовете ее.

1 голос
/ 13 мая 2011

В Python функции не доступны магически отовсюду (как, скажем, php).Они должны быть объявлены первыми.Так что это будет работать:

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

pyth_test(1, 2)

Но это не будет:

pyth_test(1, 2)

def pyth_test (x1, x2):
    print x1 + x2
0 голосов
/ 18 октября 2014

при работе с IDLE установленной версией Python

>>>def any(a,b):
...    print(a+b)
...
>>>any(1,2)
3
0 голосов
/ 13 мая 2011

Было бы полезно, если бы вы показали код, который вы используете для простой тестовой программы. Положите прямо в переводчик, это похоже на работу.

>>> def pyth_test (x1, x2):
...     print x1 + x2
... 
>>> pyth_test(1, 2)
3
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...