On 21 mar, 10:14, [EMAIL PROTECTED] wrote: > On Mar 20, 9:28 am, "Jerry Hill" <[EMAIL PROTECTED]> wrote:
> > A more general > > solution might use a generator expression, like this: > > newsz = tuple(x/scale for x in origsz) > > You want to perform a uniform call on the elements of a collection. > "Diagram A" appends 0 to every item of a list. > > >>> y= [ [] for k in range( 10 ) ] > >>> def x( fun, *ar, **kw ): > > ... def post( *xr, **xw ): > ... return fun( *(xr+ ar), **kw ) > ... return post > ...>>> x( list.append, 0 )( y[0] ) Sane programmers replace that crazyness with this code: for x in collection: x.append(0) > >>> y= ( 300, 400 ) > >>> tuple( map( x( int.__add__, 1, ), y ) ) > > (301, 401) Sane programmers replace that crazyness with this code: tuple(x+1 for x in y) > Floats get harder, since you're looking at composition. > > >>> tuple( map( compose( float, x( float.__mul__, 1/ 2.5 ) ), y ) ) > > (120.0, 160.0) # (160, 120) Sane programmers -like D'Aprano, Jerry Hill and me- replace that crazyness with this code: tuple(x/2.5 for x in y) > def compose( *f ): > def post( *ar, **kw ): > if len( f )> 1: > return f[0]( compose( *f[1:] )( *ar, **kw ) ) > return f[0]( *ar, **kw ) > return post Sane programmers don't write such semi-functional things (unless it helps expressing the problem in certain domains). I now think that deprecating map, lambda & Co. was a good thing after all. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list