A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2003-November/040537.html below:

[Python-Dev] "groupby" iterator

[Python-Dev] "groupby" iteratorPhillip J. Eby pje at telecommunity.com
Sun Nov 30 18:48:25 EST 2003
At 09:57 PM 11/30/03 +0100, Alex Martelli wrote:
> > students.sort(key=attrgetter('grade'))  # key=lambda r:r.grade
> > students.sort(key=itemgetter(2))        # key=lambda r:[2]
> > students.sort(key=itemgetter('grade'))  # key=lambda r:r['grade']
>
>I concur: "overloading" extract to mean (the equivalent of) either
>getattr or getitem depending on the argument type doesn't look
>good, besides making it unusable to extract some items from dicts.
>
>Since these functions or types are going to be in operator, I think
>we can afford to "spend" two names to distinguish functionality
>(even though attgetter and itemgetter look nowhere as neat as
>extract -- I don't have better suggestions offhand).

How about:

extract(attr='grade')
extract(item=2)
extract(method='foo')   # returns the result of calling 'ob.foo()'

And following the pattern of Zope's old "query" package:

extract(extract(attr='foo'), attr='bar')   # extracts ob.foo.bar
extract(extract(item=10), method='spam')   # extracts ob[10].spam()

i.e., the first (optional) positional argument to extract is a function 
that's called on the outer extract's argument, and the return value is then 
used to perform the main extract operation on.

IIRC, the Zope query package used __getitem__ instead of __call__ on its 
instances as a speed hack, but I don't think we should follow that example.  :)


More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4