[Python-Dev] replacing 'global'

Alex Martelli aleaxit at yahoo.com
Mon Oct 27 13:40:31 EST 2003


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:
> >
> >   a[x::y]
> >
> > already means something (an extended slice with start=x, no stop, and
> > step=y).
>
> On the other hand:
>
>   a[x y]
>
> 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.


Alex




More information about the Python-Dev mailing list