Что произойдет при выполнении 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, а чтобы избежать побочных эффектов — лучше возвращать новое значение и присваивать его снаружи.

Проверь себя · 1/3разбор после ответа
Дана функция def f(a, b, c): return a * 100 + b * 10 + c. Что вернет вызов f(1, c=3, b=2)?
Тренировать Python в Telegram

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