On 07-05-18 17:45, Peter Otten wrote:
> Antoon Pardon wrote:
>
>> On 05-05-18 09:33, Peter Otten wrote:
>>> I think you have established that there is no straight-forward way to
>>> write this as a lambda. But is adding a default to itemgetter the right
>>> conclusion?
>>>
>>> If there were an exce
Antoon Pardon wrote:
> On 05-05-18 09:33, Peter Otten wrote:
>> I think you have established that there is no straight-forward way to
>> write this as a lambda. But is adding a default to itemgetter the right
>> conclusion?
>>
>> If there were an exception-catching decorator you could write
>>
>>
On 05-05-18 09:33, Peter Otten wrote:
> I think you have established that there is no straight-forward way to write
> this as a lambda. But is adding a default to itemgetter the right
> conclusion?
>
> If there were an exception-catching decorator you could write
>
> f = catch(IndexError, "spam")
On Fri, May 4, 2018 at 5:34 PM, Thomas Jollans wrote:
> On 04/05/18 22:38, Ian Kelly wrote:
>> The real thing is written in C.
>>
>
> Is it though?
>
> https://github.com/python/cpython/blob/a1fc949b5ab8911a803eee691e6eea55cec43eeb/Lib/operator.py#L265
It is. First, notice the docstring of that m
item. This isn't possible with itemgetter with default
arguments.
Nobody suggests that itemgetter is a magic wand that ought to solve every
imaginable problem. There will always be sufficiently complex examples
where you have to write your own key function.
Right. And it looks to me, that
[:1] + t[2:]
So which of these is the "One Obvious Way"?
> The second and the forth options support also the case when there is no
> natural minimal value for third items (e.g. for negative integers) or if
> you want to order 2-tuples before 3-tuples with empty third item a
On Sat, 05 May 2018 09:33:37 +0200, Peter Otten wrote:
> I think you have established that there is no straight-forward way to
> write this as a lambda.
What I *mostly* established was that I was having a "cannot brain, I have
the dumb" day, because the solution with ternary if was obvious in
h
Steven D'Aprano wrote:
> A re-occurring feature request is to add a default to itemgetter and
> attrgetter. For example, we might say:
>
> from operator import itemgetter
> f = itemgetter(1, 6, default="spam") # proposed feature
> f("Hello World!") # returns ('e', 'W')
> f("Hello") # re
lambda t: t[:1] + t[2:]
The second and the forth options support also the case when there is no
natural minimal value for third items (e.g. for negative integers) or if
you want to order 2-tuples before 3-tuples with empty third item and the
same first item. This isn't possible with ite
On Fri, 04 May 2018 14:38:54 -0600, Ian Kelly wrote:
> On Fri, May 4, 2018 at 11:04 AM, Steven D'Aprano
> wrote:
[...]
>> My guess is that they were thinking that there's no need to complicate
>> itemgetter for this use-case when it is just as easy to write up a
>> quick lambda to do the job.
>
On Fri, 04 May 2018 15:27:02 +0200, Thomas Jollans wrote:
spamgetter = (lambda seq, i=2, fallback="spam":
> ... seq[i] if abs(i) < len(seq) or i == -len(seq)
> ... else fallback)
spamgetter("abcd", i=-4)
> 'a'
spamgetter("abcd")
> 'c'
spamgett
On Fri, 04 May 2018 15:27:16 +0200, Antoon Pardon wrote:
>> I might be slow today, but I cannot see how to write a clear, obvious,
>> efficient lambda that provides functionality equivalent to itemgetter
>> with a default value.
[...]
> This seems to work:
>
> f = (lambda seq: (list(seq) + 3 * [
On 04/05/18 22:38, Ian Kelly wrote:
> On Fri, May 4, 2018 at 11:04 AM, Steven D'Aprano
> wrote:
>> On Fri, 04 May 2018 09:17:14 -0600, Ian Kelly wrote:
>>
>>> On Fri, May 4, 2018 at 7:01 AM, Steven D'Aprano
>>> wrote:
Here are the specifications:
* you must use lambda, not def;
>>>
On Fri, May 4, 2018 at 11:04 AM, Steven D'Aprano
wrote:
> On Fri, 04 May 2018 09:17:14 -0600, Ian Kelly wrote:
>
>> On Fri, May 4, 2018 at 7:01 AM, Steven D'Aprano
>> wrote:
>>> Here are the specifications:
>>>
>>> * you must use lambda, not def;
>>
>> Why? This seems like an arbitrary constraint
On Fri, 04 May 2018 09:17:14 -0600, Ian Kelly wrote:
> On Fri, May 4, 2018 at 7:01 AM, Steven D'Aprano
> wrote:
>> Here are the specifications:
>>
>> * you must use lambda, not def;
>
> Why? This seems like an arbitrary constraint.
You'll have to ask the two core devs. In my post, in the part y
On Sat, May 5, 2018 at 1:17 AM, Ian Kelly wrote:
> On Fri, May 4, 2018 at 7:01 AM, Steven D'Aprano
> wrote:
>> Here are the specifications:
>>
>> * you must use lambda, not def;
>
> Why? This seems like an arbitrary constraint.
>
> def itemgetter2(*items, default):
> return lambda seq: tuple(
On Fri, May 4, 2018 at 7:01 AM, Steven D'Aprano
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
On 04-05-18 15:01, Steven D'Aprano wrote:
> A re-occurring feature request is to add a default to itemgetter and
> attrgetter. For example, we might say:
>
> from operator import itemgetter
> f = itemgetter(1, 6, default="spam") # proposed feature
> f("Hello World!") # returns ('e', 'W')
> f("He
On 2018-05-04 15:01, Steven D'Aprano wrote:
> A re-occurring feature request is to add a default to itemgetter and
> attrgetter. For example, we might say:
>
> from operator import itemgetter
> f = itemgetter(1, 6, default="spam") # proposed feature
> f("Hello World!") # returns ('e', 'W')
> f(
A re-occurring feature request is to add a default to itemgetter and
attrgetter. For example, we might say:
from operator import itemgetter
f = itemgetter(1, 6, default="spam") # proposed feature
f("Hello World!") # returns ('e', 'W')
f("Hello") # returns ('e', 'spam')
Two senior deve
20 matches
Mail list logo