Quando um módulo Python (arquivo .py) é executado, as instruções de nível superior nele são executadas na ordem em que aparecem, de cima para baixo (do começo ao fim). Isso significa que você não pode fazer referência a algo até que tenha definido. Por exemplo, o seguinte irá gerar o erro mostrado:
c = a + b # -> NameError: name 'a' is not defined
a = 13
b = 17
Ao contrário de muitas outras linguagens, def
e as class
instruções são executáveis em Python - não apenas declarativas - portanto, você não pode fazer referência a nenhum dos dois a
ou b
até que isso aconteça e sejam definidos. É por isso que seu primeiro exemplo tem problemas - você está referenciando a Kerma()
função antes de sua def
instrução ser executada e o corpo ter sido processado e o objeto de função resultante vinculado ao nome da função, portanto, não está definido nesse ponto do script.
Programas em linguagens como C ++ são geralmente pré-processados antes de serem executados e durante este estágio de compilação, o programa inteiro e quaisquer #include
arquivos aos quais ele se refere são lidos e processados de uma vez. Ao contrário do Python, esta linguagem apresenta instruções declarativas que permitem que o nome e a sequência de chamada das funções (ou tipo estático de variáveis) sejam declarados (mas não definidos), antes de usar para que, quando o compilador encontrar seu nome, tenha informações suficientes para verificar seus uso, que envolve principalmente a verificação de tipo e conversões de tipo, nenhuma das quais requer que seu conteúdo real ou corpos de código tenham sido definidos ainda.