2013-09-27 21 views
8

Come si chiama una funzione da un file importato? per esempio:Python: funzione di chiamata dal file importato

prova:

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

Test2:

import test 
aFunction() 

Questo mi invia un errore di nome, dicendo: la mia funzione non è definita. Ho anche provato:

from test import aFunction 

E:

from test import * 

Ho anche cercato di non importare test2 in prova. Sto arrivando a Python da C++, quindi temo che mi manchi qualcosa di palesemente ovvio per i programmatori Python veterani ...

+1

Il vostro 'dalla prova aFunction' importazione dovrebbero hanno lavorato, quale errore hai visto? –

+3

Nota che esiste anche un [pacchetto '' test'] (http://docs.python.org/2/library/test.html) incluso in Python, potresti invece importare * quello *. –

+0

Avevo lo stesso errore nel mio progetto più grande, ho creato i file di test solo per mostrare il mio problema. Stavo ricevendo l'errore "Errore di importazione: impossibile importare il nome 'aFunction'". – RageCage

risposta

9

Stai creando un'importazione circolare. test.py importa test2.py che tenta di importare test.py.

Non farlo. Per il momento test2 importa test, quel modulo non ha completato l'esecuzione di tutto il codice; la funzione non è ancora definita:

  • test viene compilato ed eseguito, e un oggetto modulo vuoto viene aggiunto sys.modules.

  • Viene eseguita la riga import test2.

    • test2 è compilato ed eseguito, e un oggetto modulo vuoto viene aggiunto sys.modules.

    • Viene eseguita la riga import test.

      • test è già presente come modulo in sys.modules, tale scopo viene restituito e legato al nome test.
    • Una riga successiva tenta di eseguire test.aFunction(). Non esiste un nome simile in test. Viene sollevata un'eccezione.

  • Le linee che definiscono def aFunction() non vengono mai eseguiti, perché un'eccezione è stata sollevata.

rimuovere la riga import test2, ed eseguire test2.pydirettamente, e importare la funzione funzionerà bene:

import test 

test.aFunction() 
+0

+1 Buona spiegazione di come sono state risolte le importazioni. Qualcuno con cui ho chattato ieri (con un pesante background Java) è rimasto davvero sorpreso dal modo in cui l'importazione funziona effettivamente in python. – Brian

+0

L'avevo sospettato. Come vedrai, ho detto che l'ho fatto in entrambi i modi. – RageCage

+0

@BraydonKains Deve esserci qualcos'altro che sta succedendo perché così funziona. – Brian

Problemi correlati