TGViewer
Python: задачки и вопросы Python: задачки и вопросы @quiz_python · 6.93K subscribers
Post #4556 733
Развёрнутое пояснение

1️⃣Внутри тела класса 𝙰 создаётся атрибут 𝚡 = 𝟻.

2️⃣Затем начинается list comprehension [𝚡 𝚏𝚘𝚛 𝚒 𝚒𝚗 𝚛𝚊𝚗𝚐𝚎(𝟹)]; в Python 3 это выражение компилируется как отдельная вложенная функция со своей областью видимости.

3️⃣Итерируемый объект 𝚛𝚊𝚗𝚐𝚎(𝟹) вычисляется в области видимости класса (это работает), но выражение 𝚡 внутри comprehension ищется в локальной области comprehension, затем в глобальной — область класса пропускается.

4️⃣Поскольку 𝚡 не найден ни локально, ни глобально, выбрасывается NameError: name 'x' is not defined.

Почему это важно
Это неочевидное поведение часто ломает код при портировании с Python 2 на 3. Решение — вынести значение в итерируемое: [𝚡 𝚏𝚘𝚛 𝚡 𝚒𝚗 [𝚡] 𝚏𝚘𝚛 𝚒 𝚒𝚗 𝚛𝚊𝚗𝚐𝚎(𝟹)] или использовать значение по умолчанию в лямбде.
  • 🙈 2
  • 👍 1
More from @quiz_python
  1. Sep 21, 2026Развёрнутое пояснение: 1. make_handlers создаёт пустой список handlers. 2. Цикл дважды при…
  2. Sep 21, 2026Post #4880
  3. Sep 21, 2026Развёрнутое пояснение: 1. Вызывается persist_order, и блок try печатает строку write. 2. И…
  4. Sep 21, 2026Post #4878
  5. Sep 14, 2026А вы уже забрали свой подарок ко Дню программиста? Мы в Tproger вместе с нашими друзьями с…
  6. Aug 30, 2026Развёрнутое пояснение: 1. Создаётся список batch с двумя разными словарями. 2. Вызов enric…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →