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: |

When choosing the right name for your Telegram channel, use the language of your target audience. The name must sum up the essence of your channel in 1-3 words. If you’re planning to expand your Telegram audience, it makes sense to incorporate keywords into your name. Choose quality over quantity. Remember that one high-quality post is better than five short publications of questionable value. Telegram channels enable users to broadcast messages to multiple users simultaneously. Like on social media, users need to subscribe to your channel to get access to your content published by one or more administrators. The public channel had more than 109,000 subscribers, Judge Hui said. Ng had the power to remove or amend the messages in the channel, but he “allowed them to exist.” Although some crypto traders have moved toward screaming as a coping mechanism, several mental health experts call this therapy a pseudoscience. The crypto community finds its way to engage in one or the other way and share its feelings with other fellow members.
from us


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