Что произойдет при выполнении x = 1; def foo(): x = x + 1; return x; foo()?

ARecursionError
BAttributeError
CUnboundLocalError
DRuntimeError
Правильный ответ. Если внутри функции есть присваивание имени, Python считает его локальным; чтение до присваивания приводит к UnboundLocalError.

Разбор

Внутри foo() есть присваивание x = ..., поэтому x считается локальной переменной. Но выражение справа x + 1 пытается прочитать локальный x до того, как ему присвоено значение. Это приводит к UnboundLocalError. Чтобы изменить глобальную переменную, нужен global x, а чтобы избежать побочных эффектов — лучше возвращать новое значение и присваивать его снаружи.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

Ещё вопросы по теме «Функции и аргументы»