summaryrefslogtreecommitdiffstats
path: root/Doc/library/operator.rst
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2010-08-21 20:12:19 (GMT)
committerBenjamin Peterson <benjamin@python.org>2010-08-21 20:12:19 (GMT)
commit058981b2ec2d96d58aea3fc285fee062a32a5854 (patch)
treea41c6a668864d694c19c8f67ce14c8cbe9b85e1f /Doc/library/operator.rst
parent3ebaed60b4779f89e5f5b82373c5a3bbc452813c (diff)
downloadcpython-058981b2ec2d96d58aea3fc285fee062a32a5854.zip
cpython-058981b2ec2d96d58aea3fc285fee062a32a5854.tar.gz
cpython-058981b2ec2d96d58aea3fc285fee062a32a5854.tar.bz2
Merged revisions 84242-84244 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r84242 | benjamin.peterson | 2010-08-21 15:01:28 -0500 (Sat, 21 Aug 2010) | 1 line indent properly ........ r84243 | benjamin.peterson | 2010-08-21 15:03:15 -0500 (Sat, 21 Aug 2010) | 1 line fix more indentation ........ r84244 | benjamin.peterson | 2010-08-21 15:08:36 -0500 (Sat, 21 Aug 2010) | 1 line provide sample implementations for attrgetter and methodcaller ........
Diffstat (limited to 'Doc/library/operator.rst')
-rw-r--r--Doc/library/operator.rst55
1 files changed, 38 insertions, 17 deletions
diff --git a/Doc/library/operator.rst b/Doc/library/operator.rst
index 20a82bd..854f14d 100644
--- a/Doc/library/operator.rst
+++ b/Doc/library/operator.rst
@@ -496,7 +496,23 @@ expect a function argument.
attribute is requested, returns a tuple of attributes. After,
``f = attrgetter('name')``, the call ``f(b)`` returns ``b.name``. After,
``f = attrgetter('name', 'date')``, the call ``f(b)`` returns ``(b.name,
- b.date)``.
+ b.date)``. Equivalent to::
+
+ def attrgetter(*items):
+ if len(items) == 1:
+ attr = items[0]
+ def g(obj):
+ return resolve_attr(obj, attr)
+ else:
+ def g(obj):
+ return tuple(resolve_att(obj, attr) for attr in items)
+ return g
+
+ def resolve_attr(obj, attr):
+ for name in attr.split("."):
+ obj = getattr(obj, name)
+ return obj
+
The attribute names can also contain dots; after ``f = attrgetter('date.month')``,
the call ``f(b)`` returns ``b.date.month``.
@@ -516,15 +532,15 @@ expect a function argument.
operand's :meth:`__getitem__` method. If multiple items are specified,
returns a tuple of lookup values. Equivalent to::
- def itemgetter(*items):
- if len(items) == 1:
- item = items[0]
- def g(obj):
- return obj[item]
- else:
- def g(obj):
- return tuple(obj[item] for item in items)
- return g
+ def itemgetter(*items):
+ if len(items) == 1:
+ item = items[0]
+ def g(obj):
+ return obj[item]
+ else:
+ def g(obj):
+ return tuple(obj[item] for item in items)
+ return g
The items can be any type accepted by the operand's :meth:`__getitem__`
method. Dictionaries accept any hashable value. Lists, tuples, and
@@ -545,12 +561,12 @@ expect a function argument.
Example of using :func:`itemgetter` to retrieve specific fields from a
tuple record:
- >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
- >>> getcount = itemgetter(1)
- >>> map(getcount, inventory)
- [3, 2, 5, 1]
- >>> sorted(inventory, key=getcount)
- [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
+ >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
+ >>> getcount = itemgetter(1)
+ >>> map(getcount, inventory)
+ [3, 2, 5, 1]
+ >>> sorted(inventory, key=getcount)
+ [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
.. function:: methodcaller(name[, args...])
@@ -559,7 +575,12 @@ expect a function argument.
additional arguments and/or keyword arguments are given, they will be given
to the method as well. After ``f = methodcaller('name')``, the call ``f(b)``
returns ``b.name()``. After ``f = methodcaller('name', 'foo', bar=1)``, the
- call ``f(b)`` returns ``b.name('foo', bar=1)``.
+ call ``f(b)`` returns ``b.name('foo', bar=1)``. Equivalent to::
+
+ def methodcaller(name, *args, **kwargs):
+ def caller(obj):
+ return getattr(obj, name)(*args, **kwargs)
+ return caller
.. versionadded:: 2.6