TGViewer
Python вопросы с собеседований Python вопросы с собеседований @python_job_interview · 24.9K subscribers
Post #1168 2.34K
🧩 Задача:


funcs = []

for i in range(3):
def f():
return i
funcs.append(f)

results = [func() for func in funcs]
print(results)


❓ Что будет выведено?

Многие ожидают:



[0, 1, 2]


Но Python выведет:


[2, 2, 2]

🧠 Почему так?
В Python функции не копируют значения переменных, а запоминают ссылки на них.

Когда f() вызывается, она смотрит, чему равен i на момент вызова, а не на момент создания функции.

Переменная i в цикле после завершения становится равной 2 — и все три функции ссылаются на одну и ту же переменную i.

✅ Как это исправить?
Нужно «захватить» текущее значение i в локальной области видимости через аргумент по умолчанию:


funcs = []

for i in range(3):
def f(i=i):
return i
funcs.append(f)

results = [func() for func in funcs]
print(results) # [0, 1, 2]

🧠 Чему это учит:
Как работают замыкания и области видимости в Python.

Почему важно понимать, когда значения «захватываются», а когда — «ссылаются».
  • 👍 10
  • ❤ 4
  • 🥰 1
More from @python_job_interview
  1. Sep 23, 2026Визуализация данных на Python: 10 лучших примеров с кодом Визуализация данных на Python -…
  2. Sep 22, 2026Как правильно получить случайное число в Python Если нужен диапазон от 1 до 100 включитель…
  3. Sep 19, 2026✔️ Кто подключился к вашей сети? NetAlertX обнаруживает устройства и уведомляет об изменен…
  4. Sep 18, 2026✔️ QuiverAI выпустила обновление генератора векторной графики Во второе поколение семейств…
  5. Sep 17, 2026📚 Бесплатная книга по математике для Computer Science и Machine Learning - более 2200 стр…
  6. Sep 15, 2026🐍 Python: как найти изменённое поле во вложенном словаре Сравнение before == after покаже…
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 →