forked from VimPlug/jedi
34 lines
1015 B
Plaintext
34 lines
1015 B
Plaintext
# Just copied this code from Python 3.6.
|
|
|
|
class itemgetter:
|
|
"""
|
|
Return a callable object that fetches the given item(s) from its operand.
|
|
After f = itemgetter(2), the call f(r) returns r[2].
|
|
After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3])
|
|
"""
|
|
__slots__ = ('_items', '_call')
|
|
|
|
def __init__(self, item, *items):
|
|
if not items:
|
|
self._items = (item,)
|
|
def func(obj):
|
|
return obj[item]
|
|
self._call = func
|
|
else:
|
|
self._items = items = (item,) + items
|
|
def func(obj):
|
|
return tuple(obj[i] for i in items)
|
|
self._call = func
|
|
|
|
def __call__(self, obj):
|
|
return self._call(obj)
|
|
|
|
def __repr__(self):
|
|
return '%s.%s(%s)' % (self.__class__.__module__,
|
|
self.__class__.__name__,
|
|
', '.join(map(repr, self._items)))
|
|
|
|
def __reduce__(self):
|
|
return self.__class__, self._items
|
|
|