Generally speaking:
foo[somestuff]
calls either __getitem__
, or __setitem__
. (there's also __getslice__
and __setslice__
, but those are now deprecated, so let's not talk about that). Now, if somestuff
has a comma in it, python will pass a tuple
to the underlying function:
foo[1,2] # passes a tuple
If there is a :
, python will pass a slice:
foo[:] # passes `slice(None, None, None)`
foo[1:2] # passes `slice(1, 2, None)`
foo[1:2:3] # passes `slice(1, 2, 3)
foo[1::3] # passes `slice(1, None, 3)
Hopefully you get the idea. Now if there is a comma and a colon, python will pass a tuple which contains a slice. in your example:
foo[:, 1] # passes the tuple `(slice(None, None, None), 1)`
What the object (foo
) does with the input is entirely up to the object.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…