Область видимости функций внутри одного листинга

Уважаемые коллеги, приветствую!

В основном пишу на PHP и JavaScript, но хочу уметь и Python. И вот в какой-то момент для меня неочевидным оказалось поведение вызова функции до ее объявления. Т.е., если python выдает ошибку NameError для следующего кода:

get_name()
def get_name(name='John'):
    print('Hello, ', name)

то в аналогичной ситуации PHP и JS отрабатывают без ошибок и выдают ожидаемый мной результат. С классами тоже самое. Если оформить отдельным модулем и импортировать вначале файла, то все работает. Но в том-то и дело, что мне не всегда нужно несколько файлов, а всего один. И поэтому получается какая-то неорганизованная мешанина из определений функций и их вызовов, не получается организовать логическую структуру, внутренний перфекционист страдает... Это как-нибудь решается в пределах одного файла? Я понимаю, что выполнение кода происходит по мере его интерпретации, но PHP и JS как-то ж работают. Или это из-за их JIT`а? Но ведь и python сохраняет промежуточный вариант в виде байт-кода. Или я что-то не так понимаю? Подскажите, пожалуйста!


Ответы (0 шт):