Выбор ответа Junior Функции и области видимости обновлено

Перекрытие встроенных имён

Вопрос

Почему после list = [1, 2] вызов list("ab") падает?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Глобальное list перекрыло встроенное: LEGB находит его раньше. Встроенные имена ищутся последними (B в LEGB).

Варианты ответа

  1. Глобальное list перекрыло встроенное: LEGB находит его раньшеправильный ответ
  2. Встроенные функции нельзя вызывать со строкой
  3. Переменная list удалила встроенный тип из интерпретатора
  4. Это SyntaxError: list зарезервированное слово

Разбор

Встроенные имена ищутся последними (B в LEGB). Глобальная переменная list находится раньше, и list("ab") пытается вызвать список: TypeError: 'list' object is not callable. Встроенный тип при этом жив в builtins.list, и после del list всё заработает. list не ключевое слово, поэтому синтаксической ошибки нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.