Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Numpy syntax comes to mind. The extra commas often aren’t valid pure Python but are required for some operations on numpy arrays. I don’t know how this works under the hood, but expect it’s a state machine under the numpy ndarray looking for the extra commas and such.

i.e. some_array[0:5,0] which isn’t valid pure Python notation.



Extra commas are "valid in pure python" in the following sense that I can demonstrate.

Open ipython3

    In [3]: class Test:
       ...:     def __getitem__(self, index):
       ...:         print(index)
       ...: 

    In [4]: Test()[1, 2, 1:3, ..., :]
    (1, 2, slice(1, 3, None), Ellipsis, slice(None, None, None))

It's valid and we get the complicated tuple of integers, slices, ellipsis etc as printed.

Numpy has existed for a long time. Its needs have been taken care of in upstream Python, to a big extent, and other libraries can use the same features.


Interesting! Neither myself nor my coworkers could get the snippet I posted working outside the context of an ndarray, so I had speculated at that time that it there was something else going on under the hood.

You seem to have a much better grasp of Python than us, would you mind posting an example where the snipped I posted successfully accesses data from an array in pure Python? That way I can not only take the L, but correct the record and learn something in the process.


This program is quick & lazy but it uses a 1D python list and pretends it's a 2D list. It implements 2D slicing, giving you a square subset just like ndarray. It doesn't intend to be all correct or nice or useful.

https://www.pythonmorsels.com/p/2rk5t/

Is laziness a virtue? I reused the slicing implementation in `range(foo)[index]` so I didn't need to do that logic myself.


Very nice!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: