Quando viene eseguito un modulo Python (file .py), le istruzioni di primo livello in esso vengono eseguite nell'ordine in cui appaiono, dall'alto verso il basso (dall'inizio alla fine). Ciò significa che non puoi fare riferimento a qualcosa finché non lo hai definito. Ad esempio, quanto segue genererà l'errore mostrato:
c = a + b
a = 13
b = 17
A differenza di molti altri linguaggi, def
e le class
istruzioni sono eseguibili in Python, non solo dichiarative, quindi non è possibile fare riferimento a nessuno dei due a
o b
fino a quando ciò non accade e sono definiti. Questo è il motivo per cui il tuo primo esempio ha problemi: stai facendo riferimento alla Kerma()
funzione prima che la sua def
istruzione sia stata eseguita e il corpo sia stato elaborato e l'oggetto funzione risultante associato al nome della funzione, quindi non è definito in quel punto nello script.
I programmi in linguaggi come il C ++ vengono solitamente preelaborati prima di essere eseguiti e durante questa fase di compilazione l'intero programma e tutti i #include
file a cui fa riferimento vengono letti ed elaborati tutti in una volta. A differenza di Python, questo linguaggio presenta istruzioni dichiarative che consentono di dichiarare (ma non definire) il nome e la sequenza di chiamata delle funzioni (o il tipo statico di variabili), in modo che quando il compilatore incontra il loro nome abbia abbastanza informazioni per controllare il loro utilizzo, che comporta principalmente il controllo del tipo e le conversioni del tipo, nessuno dei quali richiede che il loro contenuto effettivo o il corpo del codice siano stati ancora definiti.