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:
c = a + b # -> NameError: name 'a' is not defined
a = 13
b = 17
Contrairement à beaucoup d' autres langues, def
et les class
déclarations sont exécutables en Python , et pas seulement déclaratif-vous ne pouvez pas référencer a
ou b
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 à la Kerma()
fonction avant que son def
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.