Python 3 Функции не определены до тех пор, пока они не будут выполнены в другой части кода? - PullRequest
0 голосов
/ 26 июня 2019

Я только что программировал на python и искал просто создавать простые программы, чтобы начать лучше понимать.

Я занят написанием текстовой игры с ножницами из каменной бумаги, и чтобы определить победителя / проигравшего и т.д., я создал функцию.Некоторое время, когда я запускал свою программу, я продолжал получать сообщение об ошибке при вызове функции, так как моя функция не была определена.Моя функция была ниже моего исходного кода.

Однако я по какой-то причине переместил свою функцию в верхнюю часть моего кода под объявлениями моих глобальных переменных, и теперь моя функция выполняется отлично.

Почему этодело?Есть ли способ, которым мои функции могут быть ниже основного кода, но не получить ошибку, когда моя функция не определена.Должен ли я просто объявить свою функцию раньше, а затем вызвать ее позже, если да, то как бы я объявил пустую функцию?

Я хотел бы понять, поэтому любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Почему это так?

Поскольку именно так работает Python - весь код на верхнем уровне модуля или скрипта выполняется последовательно, поэтому функции определяются только после выполнения оператора def.

Вы должны понимать, что в Python все является объектом, включая функции, классы и т. Д., Поэтому оператор def в основном является синтаксическим сахаром, который создает объект функции (из блока def) и связывает его с имя функции, то есть функция - это просто еще одна глобальная переменная в вашем модуле или скрипте - и вы не ожидаете, что сможете использовать переменную до того, как определили ее, не так ли?

есть ли способ, которым мои функции могут быть ниже моего основного кода, но не получить ошибку, когда моя функция не определена.

Да, довольно просто, поместив свой «основной код» в функцию и вызвав эту функцию в конце скрипта:

import something
import another thing

def main():
    bar = foo()
    print("the answer is {}".format(bar))

def foo():
    return 42


# this makes sure the main function will only be executed
# when using your .py file as a script, not when importing
# it as a module.    
if __name__ == "__main__":
    main()
0 голосов
/ 11 июля 2019

Функция должна быть определена в первую очередь, прежде чем она будет вызвана. Вам нужно определить функцию, а затем функцию можно вызывать в любом месте программы.

Вот как работает Python, при этом все вещи выполняются впоследовательность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...