
On 04/12/2014 06:30 PM, Terry Reedy wrote:
On 4/12/2014 3:28 PM, Joseph Martinot-Lagarde wrote:
I propose to allow to define keyword-only arguments for __getitem__.
The main use case is to be able to set a default value for indexing. I though about it after reading PEP 463 (Exception-catching expressions), this would be an alternative for one of the problem this PEP is trying to solve. Compare these solutions:
lst = [1, 2, 3] value = lst[3] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range try: # Python .... value = lst[3] .... except IndexError: .... value = 0 value = lst[3] except IndexError: 0 # PEP 463 value = lst[3, default=0] # My proposal
The problem with this is, as you note below, that everything between [ and ] is turned into a single object passed on to __getitem__.
The comma in slice notation does support passing multiple objects to get item. It's used in numpy for multidimensional lookups. I believe there is interest for adding that feature to python, so it may cause an issue with those proposals if the comma is used. But it seems to me a better way to do this may be with default method that returns a view or wrapped object that supplies a default rather than raise an index or key error. lst.default_view(0)[3] Generally you won't use different defaults with the same object that often, so it makes sense to set it early, and then not to have to do anything special in other places the object is used. Cheers, Ron