LINUX.ORG.RU

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

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

за такое:

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

в нормальном языке компилятор должен бить по рукам (я немало видел ошибок из-за того, что локальная переменная затеняет менее локальную), но мысль твою я все же понял, только высказывать ее надо так:

int i=0;
while(....) {
  ....
  ++i;
}
while(....) { // этот цикл надо начать именно с того i, где закончился первый
  ....
  ++i;
}

Бардак - он, как обычно, в головах.

а я что, против? в голове гвидо, например, когда он делал области видимости

В примере ТС нет никакого «нелокального скоупа».

это (а точнее не это, а то, что ты хочешь этим доказать) более сложный вопрос — а бардак с областями видимости, так сказать, хотя возможно и не является непосредственным исполнителем преступления, но явно является его идейным вдохновителем

кусок кода

 
for i in range(2):
  l.append(lambda: i)
невозможно понять исходя лишь из него самого — нам еще обязательно надо знать, что такое i и где оно еще меняется — и в этом нелокальность; *само по себе* это конечно не проблема — вполне возможно, именно такое поведение и планировалось программистом, но вот если программистом планировалось другое (локальное) поведение, аналогичное foreach(auto member: collection) { .... }, то что писать тогда на питоне?

да, на с++ можно написать for(; i<n; ++i) {....} с похожим нелокальным поведением, но это превращается в локальную версию *простым* дописыванием «int i», т.е. for(int i; i<n; ++i) {....}, а как в питоне?

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

за такое:

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

в нормальном языке компилятор должен бить по рукам (я немало видел ошибок из-за того, что локальная переменная затеняет менее локальную), но мысль твою я все же понял, только высказывать ее надо так:

int i=0;
while(....) {
  ....
  ++i;
}
while(....) { // этот цикл надо начать именно с того i, где закончился первый
  ....
  ++i;
}

Бардак - он, как обычно, в головах.

а я что, против? в голове гвидо, например, когда он делал области видимости

В примере ТС нет никакого «нелокального скоупа».

это (а точнее не это, а то, что ты хочешь этим доказать) более сложный вопрос — а бардак с областями видимости, так сказать, хотя возможно и не является непосредственным исполнителем преступления, но явно является его идейным вдохновителем

кусок кода

 
for i in range(2):
  l.append(lambda: i)
невозможно понять исходя лишь из него самого — нам еще обязательно надо знать, что такое i и где оно еще меняется — и в этом нелокальность; *само по себе* это конечно не проблема — вполне возможно, именно такое поведение и планировалось программистом, но вот если программистом планировалось другое поведение, аналогичное foreach(auto member: collection) { .... }, то что писать тогда на питоне?