2013-09-27 8 views
8

Wie rufen Sie eine Funktion aus einer importierten Datei auf? zum Beispiel:Python: Funktion aus importierter Datei aufrufen

Test:

import test2 
def aFunction(): 
    print "hi there" 

Test2:

import test 
aFunction() 

Diese geben Sie mir einen Namen Fehler, sagen meine Funktion nicht definiert ist. Ich habe auch versucht:

from test import aFunction 

Und:

from test import * 

ich auch habe versucht, nicht test2 in Test importieren. Ich komme zu Python von C++, also fürchte ich, dass ich etwas vermisse, was für erfahrene Python-Programmierer offensichtlich ist ...

+1

Ihre 'von Testimport aFunction' gearbeitet haben sollte, welche Fehler haben Sie gesehen? –

+3

Beachten Sie, dass auch ein ['test'-Paket] (http://docs.python.org/2/library/test.html) in Python enthalten ist, Sie könnten stattdessen * das * importieren. –

+0

Ich hatte den gleichen Fehler in meinem größeren Projekt, ich erstellte die Testdateien, nur um mein Problem zu zeigen. Ich erhielt den Fehler "Importfehler: Name konnte nicht importiert werden aFunction '". – RageCage

Antwort

9

Sie erstellen einen kreisförmigen Import. test.py importiert test2.py, die versucht, test.py zu importieren.

Tun Sie dies nicht. Zu der Zeit test2 Importe test, dieses Modul hat die Ausführung des gesamten Codes nicht abgeschlossen; die Funktion ist noch nicht definiert:

  • test wird kompiliert und ausgeführt wird, und ein leeres Modulobjekt an sys.modules hinzugefügt. Die Zeile import test2 wird ausgeführt.

    • test2 wird kompiliert und ausgeführt wird, und ein leeres Modulobjekt an sys.modules hinzugefügt.

    • Die Linie import test wird ausgeführt.

      • test als Modul in sys.modules bereits vorhanden ist, wird diese Aufgabe zurückgeführt und auf den Namen test gebunden.
    • Eine nächste Zeile versucht test.aFunction() auszuführen. Ein solcher Name existiert in test nicht. Eine Ausnahme wird ausgelöst.

  • Die Linien def aFunction() definieren, werden nie ausgeführt, weil eine Ausnahme ausgelöst wurde.

Entfernen Sie die import test2 Linie und führen test2.pydirekt und fein arbeiten, um die Funktion zu importieren:

import test 

test.aFunction() 
+0

+1 Gute Erklärung, wie die Importe gelöst wurden. Jemand, mit dem ich gestern geplaudert habe (mit schwerem Java-Hintergrund), war wirklich überrascht, wie das Importieren tatsächlich in Python funktioniert. – Brian

+0

Ich hatte das vermutet. Wie Sie sehen werden, habe ich erwähnt, dass ich beides gemacht habe. – RageCage

+0

@BraydonKains Es muss etwas anderes passiert sein, denn wie es ist, funktioniert das. – Brian

Verwandte Themen