[Python-ideas] 'Injecting' objects as function-local constants

Jan Kaliszewski zuo at chopin.edu.pl
Mon Jun 13 02:03:32 CEST 2011


Greg Ewing dixit (2011年06月13日, 10:30):
> I'm -1 on any proposal that somehow tries to make the
> default-argument hack more acceptable.

My propositions don't make that hack less acceptable -- proposing an
alternative.
> The main reason people still feel the need to use it
> is that the for-loop is broken, insofar as it doesn't
> create a new binding for each iteration.
>> The right way to address that is to fix the for-loop,
> IMO.

Do you mean that each iteration should create separate local scope?
Then:
 j = 0
 my_lambdas = []
 for i in range(10):
 print(j) # would raise UnboundLocalError
 j = i
 my_lambdas.append(lambda: i)
Or that the loop variable should be treated specially?
Then:
 i_lambdas, j_lambdas = [], []
 for i in range(10):
 j = i
 i_lambdas.append(lambda: i)
 j_lambdas.append(lambda: j)
 print(i_lambdas[2]()) # would print 2
 print(j_lambdas[2]()) # would print 9
Cheers.
*j


More information about the Python-ideas mailing list

AltStyle によって変換されたページ (->オリジナル) /