ОП писал (курсив мой):
The answer should be 2 because first the main() function is called, then the first() function is called, overriding the global variable.
Не отвергая глобальную переменную. Если вы явно не укажете переменную как глобальную, если есть какое-либо назначение переменной в функции, она считается локальной. Смотрите также python tutorial on defining functions, где говорится (курсив мой):
More precisely, all variable assignments in a function store the value in the local symbol table; whereas variable references first look in the local symbol table, then in the local symbol tables of enclosing functions, then in the global symbol table, and finally in the table of built-in names. Thus, global variables cannot be directly assigned a value within a function (unless named in a global statement), although they may be referenced.
и documentation of the global
statement (если кто-нибудь с помощью Python 3 смотрит на это, пожалуйста, также взглянуть на (по сравнению с global
) очень полезный nonlocal
statement и его PEP 3104).
Чтобы «исправить» ваш код:
def first():
global num
num = num + 1
def main():
global num
num = 1
first()
print(num)
num = 0
num_result = main()
print(num_result)
Не использовать глобальные переменные таким образом, пожалуйста. @LutzHorn has shown in his answer how to do it right.
Причина, по которой следует избегать глобальных переменных, заключается в том, что их эффект трудно проверить, и как только код становится достаточно сложным, трудно рассуждать. Если каждая функция изменяет глобальные переменные вместо правильного ввода параметров и возвращающих значений, то понимание того, что действительно делает код, является трудным, как только у вас будет больше недели или около того расстояния от него.
Должно ли это быть неизвестно?Потому что num = 0 было определено с глобальной областью, поэтому почему она не определена внутри функции first()? –
Нет, 'num' не был определен с глобальной областью. Пожалуйста, не ставьте один и тот же комментарий под каждым ответом. Попытайтесь понять область действия в Python. –
Что вы называете переменной num вне функций, если это не глобально, что это такое? –