Дан код: x = 10 на верхнем уровне модуля и def inc(): return x + 1. Что вернёт вызов inc()?
A
NameError: имя x не определено внутри inc и не видно из глобальной областиB
UnboundLocalError: интерпретатор считает 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)?Ещё вопросы по теме «Функции и аргументы»
- Есть функция `def add(x, y): return x + y`. Что вернет вызов `add(2, 3)`?
- Дана функция `def f(a, b, c): return a * 100 + b * 10 + c`. Что вернёт вызов `f(1, c=3, b=2)`?
- Есть функция `def power(x, exp=2): return x ** exp`. Что вернёт вызов `power(3)`?
- Дана функция `def total(*args): return sum(args)`. Что вернёт вызов `total(1, 2, 3)`?
- Есть функция `def f(a, b, c): return a + b + c`. Какой вызов не выполнится из-за позиции аргументов (позиционный после именованного)?
- Все вопросы по «Функции и аргументы» →