Soru Python'da işlev tanımlı değil hatası


Python'da temel bir işlev tanımlamaya çalışıyorum ama basit bir sınama programı çalıştırdığımda her zaman aşağıdaki hatayı alıyorum;

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

İşte bu işlev için kullandığım koddur;

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

GÜNCELLEME: pyth.py adlı betiği açtım ve sonra hata verdiğinde yorumlayıcıda pyth_test (1,2) yazıyorum.

Yardım için teşekkürler. (Temel soru için özür dilerim, daha önce hiç programlamamıştım ve bir hobi olarak Python'u öğrenmeye çalışıyorum)


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"

21
2018-05-13 03:05


Menşei


Eğer işleve olan çağrı 1. hattaysa, fonksiyon tanımı nerede? - detly
Hata veren kod etkileşimli bir oturumda olduğu gibi görünür, ancak işlev kodu bir dosyanın parçası gibi görünür. Bu doğru mu? Öyleyse, dosyayı etkileşimli oturuma nasıl aktardınız? Lütfen tüm etkileşimli oturumu göstermek için sorunuzu düzenleyin ve daha fazla kod ekleyin. (Düzenle düğmesi, sorunun altındaki, etiketlerin altında.) - senderle


Cevaplar:


Evet, ama hangi dosyada pyth_testtanımı açıklandı? Ayrıca çağrılmadan önce mi bulunuyor?

Düzenle:

Perspektif içine koymak için, adında bir dosya oluşturun test.py aşağıdaki içeriklerle:

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

pyth_test(1,2)

Şimdi aşağıdaki komutu çalıştırın:

python test.py

İstediğiniz çıktıyı görmelisiniz. Şimdi etkileşimli bir oturumdaysanız, şu şekilde gitmeli:

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

Umarım bu beyanın nasıl işlediğini açıklar.


Düzenin nasıl çalıştığı hakkında bir fikir vermek için birkaç dosya oluşturacağız. Aşağıdakileri temiz tutmak için yeni bir boş klasör oluşturun:

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)

Şimdi koşarsan:

python program.py

3. Çıkacak. Şimdi neyin yanlış gittiğini açıklayalım, programımızı şu şekilde değiştirelim:

# 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

Şimdi ne olacağını görelim:

$ 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

Belirtildiği gibi, python modülü yukarıda belirtilen nedenlerden dolayı bulamamaktadır. Bu nedenle, beyanlarınızı en üstte tutmalısınız.

Şimdi, etkileşimli python oturumunu çalıştırırsak:

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

Aynı süreç geçerlidir. Şimdi, paket ithalatı o kadar basit değil, bu yüzden nasıl çalıştığınızı modüller Python ile çalışır. Umarım bu, öğrenmenize yardımcı olur.


27
2018-05-13 03:07



Teşekkürler. Bu yararlı ve işe yarıyor. Komut dosyasını başka bir komut dosyasından veya etkileşimli oturumdan nasıl çağırırım? Yani, test.py dosyasını kapatmış olsaydım, pyth_test işlevini çalıştırmaya nasıl başlarım? Teşekkürler! - Lance Collins
@ user751698 Lütfen inline verilen açıklamaları kontrol edin. Umarım bir şeyleri kırar ve sonunda bağlantıyı kontrol etmeyi unutma! - onteria_
Örneğinizi çalışmaya başlatabiliyorum ve modüller belgelerini okuyabiliyorum, ancak sys.path'e bir yol eklerken sorun yaşıyorum. Bir test.py dosyasını "development" adlı bir dizine kaydettim ve bunu sys.path dosyasına eklemeye çalışıyorum, böylece mevcut scriptimden index.py adında bir işlevi alabilirim. Kodu orijinal gönderinin altına ekledim. - Lance Collins
@ user751698 Lütfen bunun için ayrı bir soru yapın, çünkü bu farklı bir konu ve orijinal soruyu daha karmaşık hale getirecek. - onteria_
U da yapabilir import filename sonra filename.function() Ayrıca, programı okuduğunuzda, fonksiyonun hangi dosyadan geldiğini öğrenebilirsiniz. Bu durumda import myfunction sonra myfunction.pyth_test(1,2). - erm3nda


Benim için çalışıyor:

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

Fonksiyonu tanımladığınızdan emin olun önce Sen buna diyorsun.


1
2018-05-13 03:08





Python işlevlerinde her yerden sihirli bir şekilde erişilebilir değildir (örneğin, php gibi). İlk olarak ilan edilmeleri gerekiyor. Yani bu işe yarayacak:

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

pyth_test(1, 2)

Ama bu olmaz:

pyth_test(1, 2)

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

1
2018-05-13 03:09





Basit test programı için kullandığınız kodu gösterdiğinizde yardımcı olur. Doğrudan yorumlayıcıya koy, işe yarıyor gibi görünüyor.

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

0
2018-05-13 03:09





IDLE yüklü Python sürümü ile çalışıyorsa

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

0
2017-10-18 17:04