Дан код: x = 10 на верхнем уровне модуля и def inc(): return x + 1. Что вернёт вызов inc()?

ANameError: имя x не определено внутри inc и не видно из глобальной области
BUnboundLocalError: интерпретатор считает x локальной и обращается до присваивания
CЧисло 10: функция возвращает само глобальное значение x без выполнения сложения
DЧисло 11: имя x читается из глобальной области по правилу LEGB и прибавляется 1
Правильный ответ. Если переменная только читается, Python берёт её из глобальной области (правило LEGB).

Разбор

По правилу областей видимости (LEGB) Python ищет имя сначала локально, затем во внешних, глобальной и встроенной областях. В inc() x не присваивается, а только читается, поэтому используется глобальное x = 10, и результат x + 1 равен 11. UnboundLocalError появляется только если внутри функции есть присваивание x = ... — тогда x считается локальной, но к моменту чтения ещё не определена.

Проверь себя · 1/3разбор после ответа
Есть функция def power(x, exp=2): return x ** exp. Что вернёт вызов power(3)?
Тренировать Python в Telegram

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