Lorsqu'un module Python (fichier .py) est exécuté, les instructions de premier niveau 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 faire référence à quelque chose avant de l'avoir défini. Par exemple, l'énoncé suivant générera l'erreur indiquée :
c = a + b # -> NameError: name 'a' is not defined
a = 13
b = 17
Contrairement à de nombreuses autres langues, def
y class
sont exécutables en Python - et pas seulement déclaratives - et vous ne pouvez donc pas faire référence à l'un ou l'autre des éléments suivants a
o b
jusqu'à ce que cela se produise et qu'ils soient définis. C'est la raison pour laquelle votre premier exemple pose problème - vous faites référence à l'élément Kerma()
avant sa fonction def
a été exécutée et le corps a été traité, et l'objet fonction résultant est lié au nom de la fonction, qui n'est donc pas définie à ce stade dans le script.
Les programmes dans des langages comme le C++ sont généralement prétraités avant d'être exécutés et, au cours de cette phase de compilation, l'ensemble du programme et tous les éléments qui le composent sont traités. #include
les fichiers auxquels il se réfère sont lus et traités en une seule fois. Contrairement à Python, ce langage comporte des déclarations qui permettent de déclarer (mais pas de définir) le nom et la séquence d'appel des fonctions (ou le type statique des variables) avant leur utilisation, de sorte que lorsque le compilateur rencontre leur nom, il dispose de suffisamment d'informations pour vérifier leur utilisation, ce qui implique principalement la vérification du type et les conversions de type, sans qu'il soit nécessaire de définir leur contenu réel ou le corps du code.