Est-il possible d'appeler une fonction sans d'abord la définir complètement? En essayant cela, j'obtiens l'erreur: " nom_fonction n'est pas défini". Je viens d'un arrière-plan C ++ donc ce problème me laisse perplexe.
Déclarer la fonction avant les travaux:
def Kerma():
return "energy / mass"
print Kerma()
Cependant, tenter d'appeler la fonction sans la définir au préalable pose problème:
print Kerma()
def Kerma():
return "energy / mass"
En C ++, vous pouvez déclarer une fonction après l'appel une fois que vous placez son en-tête devant elle.
Est-ce que j'ai râté quelque chose?
python
function
formatting
TheGentleOne
la source
la source
Kerma is an acronym for "kinetic energy released per unit mass"
.py
fichier séparé et de les importer? Y a-t-il des conséquences involontaires?Réponses:
Une façon qui est en quelque sorte idiomatique en Python est d'écrire:
Cela vous permet d'écrire votre code dans l'ordre que vous aimez tant que vous continuez d'appeler la fonction
main
à la fin.la source
main
fonctions sont généralement placées à la fin.if __name__ == '__main__':
commutateur est la partie idiomatique commune.if ... __main__':
. Je n'ai pas dit que lemain
devrait être placé au-dessus du reste du code. J'ai dit que la partie importante est l'appel_\_main__
à la fin, et peu importe où vous placez sa définition alors.Lorsqu'un module Python (fichier .py) est exécuté, les instructions de niveau supérieur qu'il contient sont exécutées dans l'ordre dans lequel elles apparaissent, de haut en bas (du début à la fin). Cela signifie que vous ne pouvez pas référencer quelque chose tant que vous ne l'avez pas défini. Par exemple, ce qui suit générera l'erreur affichée:
Contrairement à beaucoup d' autres langues,
def
et lesclass
déclarations sont exécutables en Python , et pas seulement déclaratif-vous ne pouvez pas référencera
oub
jusqu'à ce que cela arrive et ils sont définis. C'est pourquoi votre premier exemple a des problèmes: vous faites référence à laKerma()
fonction avant que sondef
instruction ne soit exécutée et que le corps ait été traité et que l'objet fonction résultant soit lié au nom de la fonction, donc il n'est pas défini à ce stade dans le script.Les programmes dans des langages comme C ++ sont généralement prétraités avant d'être exécutés et pendant cette étape de compilation, tout le programme et tous les
#include
fichiers auxquels il fait référence sont lus et traités en même temps. Contrairement à Python, ce langage propose des instructions déclaratives qui permettent de déclarer le nom et la séquence d'appel des fonctions (ou le type statique de variables) (mais non défini), avant utilisation afin que lorsque le compilateur rencontre leur nom, il dispose de suffisamment d'informations pour vérifier leur l'utilisation, qui implique principalement la vérification de type et les conversions de type, dont aucune n'exige que leur contenu réel ou leur corps de code ait encore été défini.la source
doit(); sub doit { print("I'm doing it!\n"); }
Ce n'est pas possible en Python, mais très franchement, vous constaterez bientôt que vous n'en avez pas du tout besoin. La manière Pythonic d'écrire du code est de diviser votre programme en modules qui définissent les classes et les fonctions, et un seul "module principal" qui importe tous les autres et s'exécute.
Pour de simples scripts jetables, habituez-vous à placer la «partie exécutable» à la fin, ou mieux encore, apprenez à utiliser un shell Python interactif.
la source
Python est un langage dynamique et l'interpréteur prend toujours l'état des variables (fonctions, ...) tels qu'ils sont au moment de les appeler. Vous pouvez même redéfinir les fonctions de certains blocs if et les appeler à chaque fois différemment. C'est pourquoi vous devez les définir avant de les appeler.
la source