Выбор ответа Junior Функции и области видимости обновлено
Перекрытие встроенных имён
Вопрос
Почему после list = [1, 2] вызов list("ab") падает?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Глобальное list перекрыло встроенное: LEGB находит его раньше. Встроенные имена ищутся последними (B в LEGB).
Варианты ответа
- Глобальное
listперекрыло встроенное: LEGB находит его раньшеправильный ответ - Встроенные функции нельзя вызывать со строкой
- Переменная
listудалила встроенный тип из интерпретатора - Это
SyntaxError:listзарезервированное слово
Разбор
Встроенные имена ищутся последними (B в LEGB). Глобальная переменная list находится раньше, и list("ab") пытается вызвать список: TypeError: 'list' object is not callable. Встроенный тип при этом жив в builtins.list, и после del list всё заработает. list не ключевое слово, поэтому синтаксической ошибки нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что такое *args и **kwargs
Следующий вопрос
Как передаются аргументы в функцию Python
Термины по теме
Ещё по теме «Функции и области видимости»
- Где хранятся переменные замыкания
- Вызов с *args и **kwargs: разбор сигнатуры
- Композиция функций
- Мемоизация через замыкание
- Повтор вызова с ограничением попыток
- Когда вычисляется значение по умолчанию
- Где хранятся значения по умолчанию
- Сигнатура с / и *