On Thu, 10 Mar 2005 21:19:16 +1000, Nick Coghlan <[EMAIL PROTECTED]> wrote:
> Raymond Hettinger wrote:
> > Any objections to extending itemgetter() and attrgetter() to be able to
> > extract multiple fields at a time?
> >
> >     # SELECT name, rank, serialnum FROM soldierdata
> >     map(attrgetter('name', 'rank', 'serialnum'), soldierdata)
> >
> >     # SELECT * FROM soldierdata ORDER BY unit, rank, proficiency
> >     sorted(soldierdata, key=attrgetter('unit', 'rank', 'proficiency'))
> 
> Breaking the symmetry with getattr() bothers me a little, as does the 
> signature
> change that occurs when multiple arguments are given (returning a tuple, 
> whereas
> the single argument returns just the retrieved attribute).

I don't think that the signature change is much of an issue in
practice, as the arguments will be specified explicitly in all
sensible use, and so the signature is going to be fixed for any
particular use.

> For itemgetter, I'd like to see multiple arguments eventually map to
> multi-dimensional slices (to preserve symmetry with indexing syntax).

Hmm, I can see the point. Would this impact on the performance of
itemgetter? If so, maybe requiring use of an explicit lambda for
multidimensional slices would be OK.

> Call it -1 for itemgetter and -0 for attrgetter.

I'm probably -0 on both. The idea seems neat, but what do you gain over

    map((lambda obj: obj.name, obj.rank, obj.serialnum), soldierdata)
    sorted(soldierdata, key=(lambda obj: obj.unit, obj.rank, obj.proficiency))

? And what when you want to change obj.rank to getattr(obj, rank, 'Civilian')?

Paul.
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to