Предположим, у нас есть хеш-таблица, которая отображает строки в функции. В моем примере я назову это COMMANDS
. Если я помещаю определение для некоторой функции (назовем ее cmd_add
) после хеш-таблицы, которая отображает ее в строку, а затем я пытаюсь вызвать ее, я получаю ошибку:
COMMANDS = {'add': cmd_add}
def cmd_add():
print 'ADD'
COMMANDS['add']()
# NameError: name 'cmd_add' is not defined
Теперь обратите внимание, что если я просто переместу определение функции до определения COMMANDS
, все будет работать нормально:
def cmd_add():
print 'ADD'
COMMANDS = {'add': cmd_add}
COMMANDS['add']()
# NO ERROR!
Почему это правда? Есть ли что-то в привязке Python, чего я не понимаю?