> 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/