diff options
author | Benjamin Peterson <benjamin@python.org> | 2010-08-21 20:12:19 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2010-08-21 20:12:19 (GMT) |
commit | 058981b2ec2d96d58aea3fc285fee062a32a5854 (patch) | |
tree | a41c6a668864d694c19c8f67ce14c8cbe9b85e1f /Doc/library/operator.rst | |
parent | 3ebaed60b4779f89e5f5b82373c5a3bbc452813c (diff) | |
download | cpython-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.rst | 55 |
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 |