> On 7 Oct 2019, at 16:36, Batuhan Taskaya <isidenti...@gmail.com> wrote:
> 
> 
> In fact, that would be a cool feature for ORMs. IMHO instead of ugly call 
> chain with filters, slicing is a better option (on `__class_getattr__`). As 
> said there are some disadvantages but i think this proposal deserves a PEP.

I really don't see why. Is () so much different than [] to you? Because that 
seems like the only difference here. 

> 
>> On Fri, Oct 4, 2019, 10:59 PM Caleb Donovick <donov...@cs.stanford.edu> 
>> wrote:
>> While there is no restriction on passing dicts to getitem.  Doing so tends 
>> to be a bit ugly.  I have two main use cases in mind for this syntax.
>> 
>> The first  and perhaps the most obvious, is doing relational queries.
>> ```
>> where_x_1 = db[x=1]
>> ```
>> is more beautiful than
>> ```
>> where_x_1 = db[dict(x=1)]  
>> where_x_1 = db[{'x': 1}]
>> # or by abusing slices
>> where_x_1 = db['x':1]
>> # or in the style of Pandas
>> where_x_1 = db[db['x'] == 1]
>> ```
>> 
>> Beyond relational queries my own personal use case is a shorthand for 
>> dataclasses / protocols.
>> ```
>> foo: ProtoRecord[x=int, y=int] = DataRecord[x=int, y=int](0, 1)
>> ```
>> where `DataRecord[field0=T0, ..., fieldk=Tk]` generates 
>> ```
>> @dataclass
>> class Record:
>>       field0: T0
>>       ...
>>       fieldk: Tk 
>> ```
>> and `ProtoRecord[field0=T0, ..., fieldk=Tk]` generates a similar protocol.
>> 
>> Allowing key value pairs in geitem need not change the interface of getitem. 
>>   All the key value pairs could be collected as a dict and passed to getitem 
>> as the index. Similar to how the all the positional arguments are gather 
>> into a single tuple.
>> ```
>> class Foo:
>>   def __getitem__(self, idx):
>>      print(idx)
>> 
>> f = Foo()
>> f[x=1, y=2] # {'x': 1, 'y': 2}
>> ```
>> This would make any legacy code using normal dicts as keys (I don't know how 
>> prevalent that is) automatically work with  the new syntax. 
>> 
>> There doesn't necessarily need to be support for mixing of tuple based 
>> indexing and keyword indexing. i.e.
>> ```
>> obj[0, x=1] # SyntaxError
>> ```
>> 
>> I don't really know anything about parsers but I think the grammar could be 
>> extended without issue with the following rule:
>> ```
>> subscriptlist: ... | kwargsubscript (','  kwargsubscript )* [',']
>> kwargsubscript: NAME '=' test  
>> ```
>> if `NAME '=' test` would result in ambiguity similar to argument it could be 
>> `test '=' test` with a block in ast.c
>> 
>> 
>>    -  Caleb Donovick
>> _______________________________________________
>> Python-ideas mailing list -- python-ideas@python.org
>> To unsubscribe send an email to python-ideas-le...@python.org
>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>> Message archived at 
>> https://mail.python.org/archives/list/python-ideas@python.org/message/EUGDRTRFIY36K4RM3QRR52CKCI7MIR2M/
>> Code of Conduct: http://python.org/psf/codeofconduct/
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at 
> https://mail.python.org/archives/list/python-ideas@python.org/message/LG6OKCYC3V24USG4JMQFE34IWRFX3AJJ/
> Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/HJU63NDCLWOUAZTBYPGWZDSVLYQ5WFXW/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to