PYTHON_JOB_INTERVIEW Telegram 1168
🧩 Задача:


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.

Почему важно понимать, когда значения «захватываются», а когда — «ссылаются».
👍104🥰1



tgoop.com/python_job_interview/1168
Create:
Last Update:

🧩 Задача:


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.

Почему важно понимать, когда значения «захватываются», а когда — «ссылаются».

BY Python вопросы с собеседований


Share with your friend now:
tgoop.com/python_job_interview/1168

View MORE
Open in Telegram


Telegram News

Date: |

Each account can create up to 10 public channels Content is editable within two days of publishing Step-by-step tutorial on desktop: Ng, who had pleaded not guilty to all charges, had been detained for more than 20 months. His channel was said to have contained around 120 messages and photos that incited others to vandalise pro-government shops and commit criminal damage targeting police stations. Channel login must contain 5-32 characters
from us


Telegram Python вопросы с собеседований
FROM American