"Giovanni Bajo" <rasky at develer.com> wrote in message news:027f01c69caf$b1c20450$d1b12997 at bagio... > [Giovanni Bajo] >> Yes but: >> >>>>> a = [] >>>>> for i in range(10): >> ... a.append(lambda: i) >> ... >>>>> print [x() for x in a] >> [9, 9, 9, 9, 9, 9, 9, 9, 9, 9] >. Do you agree that it would be ideal if the above code > generated range(10) instead of [9]*10, No. You are trying to reify an optical illusion resulting from putting a constant function definition inside a loop. Making the meaning of 'def f(): return i' depend on the definition-time context by partially and variably evaluating the body would make code much harder to read and understand. Consider: if a: i=666 <intervening code> def f(): return i > At > worse, couldn't Python do the "i=i" trick by itself when it sees that `i` > is a > local in the outer scope? Right now I can't think off-hand of a case in > which > this would break things. It would make code more fragile. for i in range(666): print name[i] ... <intervening code> ... def total(num): return cost[item]*num Now someone decides first loop should have more expressive loop var name and changes the first line to for item in range(666): print name[item] and the meaning of total is completely changed. Adding such long-range coupling between language statements strikes me as a poor idea. Terry Jan Reedy
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4