On Fri, May 4, 2018 at 7:01 AM, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: > Here are the specifications: > > * you must use lambda, not def;
Why? This seems like an arbitrary constraint. > * the lambda must take a single function, the sequence you want to > extract an item from; > > * you can hard-code the index in the body of the lambda; > > * you can hard-code the default value in the body of the lambda; > > * if sequence[index] exists, return that value; > > * otherwise return the default value; > > * it should support both positive and negative indices. > > Example: given an index of 2 and a default of "spam": > > (lambda seq: ... )("abcd") returns "c" > > (lambda seq: ... )("") returns "spam" def itemgetter2(*items, default): return lambda seq: tuple(get_default(seq, item, default) for item in items) def get_default(seq, item, default): try: return seq[item] except (IndexError, KeyError): return default py> f = itemgetter2(1, 6, default="spam") py> f("Hello World!") ('e', 'W') py> f("Hello!") ('e', 'spam') -- https://mail.python.org/mailman/listinfo/python-list