É possível chamar uma função sem primeiro defini-la totalmente? Ao tentar fazer isso, recebo o erro: " function_name is not defined". Eu estou vindo de uma experiência em C ++, então esse problema me deixa perplexo.
Declarando a função antes de funcionar:
def Kerma():
return "energy / mass"
print Kerma()
No entanto, tentar chamar a função sem primeiro defini-la dá problemas:
print Kerma()
def Kerma():
return "energy / mass"
Em C ++, você pode declarar uma função após a chamada, uma vez que você coloque seu cabeçalho antes dela.
Estou faltando alguma coisa aqui?
python
function
formatting
TheGentleOne
fonte
fonte
Kerma is an acronym for "kinetic energy released per unit mass"
.py
arquivo separado e importá-lo? Existem algumas consequências indesejadas?Respostas:
Uma maneira que é meio idiomática em Python é escrevendo:
Isso permite que você escreva o código na ordem que desejar, desde que continue chamando a função
main
no final.fonte
main
funções geralmente são colocadas no final.if __name__ == '__main__':
mudança é a parte idiomática comum.if ... __main__':
. Eu não disse que omain
deveria ser colocado acima do resto do código. Eu disse que a parte importante é chamar_\_main__
no final, e não importa onde você coloque sua definição então.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:
Ao contrário de muitas outras linguagens,
def
e asclass
instruções são executáveis em Python - não apenas declarativas - portanto, você não pode fazer referência a nenhum dos doisa
oub
até que isso aconteça e sejam definidos. É por isso que seu primeiro exemplo tem problemas - você está referenciando aKerma()
função antes de suadef
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.fonte
doit(); sub doit { print("I'm doing it!\n"); }
Isso não é possível em Python, mas, francamente, você logo descobrirá que não precisa disso. A maneira Pythônica de escrever código é dividir seu programa em módulos que definem classes e funções, e um único "módulo principal" que importa todos os outros e executa.
Para scripts simples descartáveis, acostume-se a colocar a "parte executável" no final ou, melhor ainda, aprenda a usar um shell Python interativo.
fonte
Python é uma linguagem dinâmica e o interpretador sempre pega o estado das variáveis (funções, ...) como elas estão no momento de chamá-las. Você pode até redefinir as funções em alguns blocos if e chamá-los de maneira diferente a cada vez. É por isso que você deve defini-los antes de chamá-los.
fonte