Telegram Group & Telegram Channel
🐍 Задача по Python: Ловушка замыканий

Что выведет следующий код?


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

for func in create_funcs():
print(func())


Варианты ответа:
A)

1
2


B)

2
2


C)

0
0


D) Ошибка выполнения


---

Правильный ответ: B

Почему:
Это классическая late binding: функция
f() не сохраняет значение i на момент создания, а берёт его из текущей области видимости при вызове.
К моменту вызова
i == 2 (последнее значение в range(3)), поэтому все три функции возвращают 2.

Чтобы избежать этого — можно использовать аргументы по умолчанию:
def f(i=i): return i



tg-me.com/pro_python_code/1781
Create:
Last Update:

🐍 Задача по Python: Ловушка замыканий

Что выведет следующий код?


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

for func in create_funcs():
print(func())


Варианты ответа:
A)

1
2


B)

2
2


C)

0
0


D) Ошибка выполнения


---

Правильный ответ: B

Почему:
Это классическая late binding: функция
f() не сохраняет значение i на момент создания, а берёт его из текущей области видимости при вызове.
К моменту вызова
i == 2 (последнее значение в range(3)), поэтому все три функции возвращают 2.

Чтобы избежать этого — можно использовать аргументы по умолчанию:
def f(i=i): return i

BY Python RU


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/pro_python_code/1781

View MORE
Open in Telegram


Python RU Telegram | DID YOU KNOW?

Date: |

The Singapore stock market has alternated between positive and negative finishes through the last five trading days since the end of the two-day winning streak in which it had added more than a dozen points or 0.4 percent. The Straits Times Index now sits just above the 3,060-point plateau and it's likely to see a narrow trading range on Monday.

That growth environment will include rising inflation and interest rates. Those upward shifts naturally accompany healthy growth periods as the demand for resources, products and services rise. Importantly, the Federal Reserve has laid out the rationale for not interfering with that natural growth transition.It's not exactly a fad, but there is a widespread willingness to pay up for a growth story. Classic fundamental analysis takes a back seat. Even negative earnings are ignored. In fact, positive earnings seem to be a limiting measure, producing the question, "Is that all you've got?" The preference is a vision of untold riches when the exciting story plays out as expected.

Python RU from tw


Telegram Python RU
FROM USA