Generator Comprehensions
Skip Montanaro
skip at pobox.com
Tue Jan 29 10:33:07 EST 2002
>> I don't see any spurious locals:
>>
>> >>> def f(n):
>> ... l = [i for i in range(n)]
>> ... print locals()
>> ... return l
>> ...
>> >>> f(5)
>> {'i': 4, 'l': [0, 1, 2, 3, 4], 'n': 5}
>> [0, 1, 2, 3, 4]
hamish> I think the original author was referring to the very fact that
hamish> 'i' is among the locals that you printed out.
Ah, well in that case, I can fall back on the excuse that "list
comprehensions are essentially syntactic sugar sprinkled on for loops". ;-)
If you convert a list comprehension to its equivalent series of for loops,
if statements, and list appends, you wind up at the end with a loop index
variable that is not destroyed. For example, the above is equivalent to
l = []
for i in range(n):
l.append(i)
"i" doesn't go away after the for loop. Nor does it after the list
comprehension.
--
Skip Montanaro (skip at pobox.com - http://www.mojam.com/)
More information about the Python-list
mailing list