История изменений
Исправление 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)
да, на с++ можно написать 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)