On Fri, Nov 02, 2018 at 10:48:22AM +0200, Serhiy Storchaka wrote:
31.10.18 21:23, Robert Vanden Eynde пише:
Should I write a PEP even though I know it's going to be rejected because the mailing list was not really into it ?
I disagree that "the mailing list was not really into it". So far, I count 12 people who responded to the original post by Giampaolo. By my count, I see: * five people in favour; * three people against, or see no need for it; * four people I can't tell if they are for or against, (possibly neutral?) [1] I know that adding features isn't decided by majority vote, but it seems clear to me that there is a substantial set of Python users, perhaps a majority, who would find this feature useful and more obvious than the alternatives. [Serhiy]
It is better to not do this. PEP 572 was initially written with the intention to be rejected.
Sounds like an excellent reason to write a PEP :-) There are some issues that ought to be addressed: - The status quo is easy to get wrong: # I've written this. More than once. L.pop(idx) if idx < len(L) else default is wrong if there is any chance of idx being negative. - The more common case of popping from the front of the list is not thread-safe: L.pop() if L else default - This clever trick is probably thread-safe (I think...) but it is wasteful and inefficient: (L or [default]).pop() and it isn't obvious how to adapt it efficiently if you need to pop from an arbitrary index. I came up with this: (L[idx:idx+1] or [default]).pop() but it is doubly wrong. - The obvious thread-safe EAFP idiom is a try...except statement, so it needs to be wrapped in a helper function to use it in expressions. That adds more overhead. The proposed .get(idx, default=x) and .pop(idx, default=x) signatures ought to be obvious and unsurprising to any moderately experienced Python programmer. These aren't complicated APIs. On the other hand: - I'm not volunteering to do the work (I don't know enough C to write a patch). Unless somebody has a patch, we can't expect the core devs who aren't interested in this feature to write it. (Hence, status quo wins a stalemate.) [1] "What makes a man turn neutral? Lust for gold? Power? Or were you just born with a heart full of neutrality?" -- Captain Zapp Brannigan -- Steve