crimes in Python

Michael Hudson mwh21 at cam.ac.uk
Wed Mar 8 09:39:27 EST 2000


kragen at dnaco.net (Kragen Sitaker) writes:

> >> sys.stderr.write(join(
> >> 	split('crimeno crime type age sex race', ' '), "\t"))
> >> sys.stderr.write(join(
> >> 	map((lambda x: 'age' + `x` + "\tsex" 
> >> 	     + `x` + "\trace" + `x`),
> >> 	range(1, max_suspects+1)))
> >> 	)
> >
> >This looks like it could be improved a lot.
> 
> I thought so too.

Random advice: while you're learning Python, forget map exists.

This is a particularly heinous use of it, as you're useing it for
side-effects and ignoring the results.  I think map is occasionally
useful for actually mapping a function over a list of inputs, but in
this context it makes no sense.

> By the way, it's broken, now that I look at it.  It puts unwanted
> spaces in the output.
> 
> lambda x: '\tage%d\tsex%d\trace%d' % (x, x, x) would be one
> improvement.  Perhaps
> 
> for i in range(1, max_suspects+1):
> 	sys.stderr.write('\tage%d\tsex%d\trace%d' % (i, i, i))

This is so much better, isn't it?  I can tell at a glance what you're
up to, whereas I couldn't really tell from your `map'.

Cheers,
M.

-- 
very few people approach me in real life and insist on proving they are
drooling idiots.                         -- Erik Naggum, comp.lang.lisp



More information about the Python-list mailing list