<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 3 July 2014 07:29, Stefano Borini <span dir="ltr"><<a href="mailto:stefano.borini@ferrara.linux.it" target="_blank">stefano.borini@ferrara.linux.it</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="">On Thu, Jul 03, 2014 at 06:12:30AM +1000, Tim Delaney wrote:<br>

> One option I don't see is to have a[b=1, c=2] be translated to<br>
> a.__getitem__((slice('b', 1, None), slice['c', 2, None)) automatically.<br>
<br>
</div>it would be weird, since it's not technically a slice, but it would work.<br>
I personally think that piggybacking on the slice would appear hackish.<br>
One could eventually think to have a keyword() object similar to slice(),<br>
but then it's basically a single item dictionary (Strategy 1) with a fancy<br>
name.</blockquote><div><br></div><div>I really do think that a[b=c, d=e] should just be syntax sugar for a['b':c, 'd':e]. It's simple to explain, and gives the greatest backwards compatibility. In particular, libraries that already abused slices in this way will just continue to work with the new syntax.</div>
<div><br></div>I'd maybe thought a subclass of slice, with .key (= .start) and and .value (= .stop) variables would work, but slice isn't subclassable so it would be a bit more difficult. That would also be backwards-compatible with existing __getitem__ that used slice, but would preclude people calling that __getitem__ with slice syntax, which I personally don't think is desireable. Instead, maybe recommend something like:<div>
<div><br></div><div>ordereddict = OrderedDictLiteral()  # using the definition from previous email</div><div><br></div><div>class GetItemByName(object):</div><div>    def __getitem__(self, t):</div><div>        # convert the parameters to a dictionary</div>
<div>        d = ordereddict[t]</div><div>        return d['name']</div><div><br></div></div><div>Hmm - here's an anonymous named tuple "literal" as another example:</div><div><br></div><div><div>class AnonymousNamedTuple(object):</div>
<div>    def __getitem__(self, t):</div><div>        d = ordereddict[t]</div><div>        t = collections.namedtuple('_', d)<br></div><div>        return t(*d.values())</div></div><div><br></div><div><div>namedtuple = AnonymousNamedTuple()</div>
<div>print(namedtuple[a='b', c=1])  # _(a='b', c=1)<br></div></div><div><br></div><div>As you can see, I'm in favour of keeping the order of the keyword arguments to the index - losing it would prevent things like the above.</div>
<div><br></div><div>Tim Delaney </div></div></div></div>