Как и в других ответах, ваша проблема - это порядок, в котором вы запускаете свой код: foo
еще не был определен при первом вызове. Просто хотел добавить комментарий о лучших практиках здесь.
Я всегда стараюсь все поместить в функцию, а затем вызываю любые скрипты внизу. Вы, вероятно, сталкивались с этим паттерном раньше, и это хорошая привычка:
CONSTANT = 5
def run():
for i in xrange(CONSTANT):
print foo(i) # whatever code you want
def foo(n):
# some method here...
pass
if __name__ == "__main__":
run()
если вы запустите это с python script.py
или нажатием f5 в режиме ожидания, run()
будет выполнено после того, как все определено.
Следуя этому шаблону, вам не нужно беспокоиться о порядке, в котором вы определяете свои функции, и вы получаете дополнительное преимущество возможности импорта foo
с другими функциями без выполнения скрипта во время импорта, что вероятно, не желаемое поведение.