On Monday 27 October 2003 07:00 pm, Just van Rossum wrote:
Guido van Rossum wrote:
The only problem with using :: is a syntactic ambiguity:
already means something (an extended slice with start=x, no stop, and step=y).
On the other hand:
doesn't mean anything, so I don't see an immediate problem.
Sorry, just, but I really don't understand the "don't see immediate problem".
As I understand the proposal:
y = 23 biglist = range(999)
def f(): y = 45 # sets a local ::y = 67 # sets the global print biglist[::y]
should this print the 67-th item of biglist, or the first 45 ones?
a[x::y] is similarly made ambiguous (slice from x step y, or index at y in scope x?), at least for human readers if not for the compiler -- to have the same expression mean either thing depending on whether x names an outer function, a local variable, or neither, or both, for example, would seem very confusing to me.
I like Neal's proposal, including the "::" digraph.
I just don't see how :: can be used nonconfusingly due to the 'clash' with "slicing with explicit step and without explicit stop" (ambiguity with slices with implicit 0 start for prefix use, a la ::y -- ambiguity with slices with explicit start for infix use, a la x::y).
A digraph, single character, or other operator that could be used (and look nice) in lieu of :: either prefix or infix -- aka "stropping by any other name", even though the syntax sugar may look different from Ruby's use of prefix $ to strop globals -- would be fine. But I don't think :: can be it.