Когда запускается модуль Python (файл .py), операторы верхнего уровня в нем выполняются в том порядке, в котором они появляются, сверху вниз (от начала до конца). Это означает, что вы не можете ссылаться на что-либо, пока это не определите. Например, следующее вызовет показанную ошибку:
c = a + b
a = 13
b = 17
В отличие от многих других языков, операторы def
и class
операторы в Python выполняются , а не только декларативно, поэтому вы не можете ссылаться ни на что, a
либо b
пока это не произойдет и они не будут определены. Вот почему в вашем первом примере есть проблемы - вы ссылаетесь на Kerma()
функцию до того, как ее def
оператор был выполнен, тело было обработано, а результирующий объект функции привязан к имени функции, поэтому он не определен в этой точке скрипта.
Программы на таких языках, как C ++, обычно предварительно обрабатываются перед запуском, и на этом этапе компиляции вся программа и все #include
файлы, на которые она ссылается, считываются и обрабатываются одновременно. В отличие от Python, этот язык содержит декларативные операторы, которые позволяют объявлять (но не определять) имя и последовательность вызовов функций (или статический тип переменных) перед использованием, так что, когда компилятор встречает их имя, он имеет достаточно информации для проверки их использование, которое в первую очередь влечет за собой проверку типов и преобразование типов, ни одно из которых не требует, чтобы их фактическое содержимое или тела кода еще были определены.