LINUX.ORG.RU

История изменений

Исправление tailgunner, (текущая версия) :

если замыкание захватывает переменную, локальную для итерации цикла (т.е. локальную для цикла и изменяющуюся в следующей итерации), то эта переменная в замыкание копируется

это немного необычная для людей семантика

...в которой куски кода:

l, i = 0, []
for i in range(2):
  l.append(lambda: i)
l = []
for i in range(2):
  l.append(lambda: i)

имеют разную семантику. Зашибись.

нелокальный скоуп — это часть питоновского бардака

Бардак - он, как обычно, в головах. В примере ТС нет никакого «нелокального скоупа».

Исходная версия tailgunner, :

если замыкание захватывает переменную, локальную для итерации цикла (т.е. локальную для цикла и изменяющуюся в следующей итерации), то эта переменная в замыкание копируется

это немного необычная для людей семантика

...в которой куски кода:

l, i = 0, []
for i in range(2):
  l.append(lambda: i)
l = []
for i in range(2):
  l.append(lambda: i)

имеют разную семантику. Зашибись.