Scope troubles with a swap function

Cris A. Fugate fugate at
Fri Aug 10 20:42:16 CEST 2001

Hi, I am trying to port some Tcl stuff to Python. Its kind of disturbing
that Python cannot handle scope. Sure you have namespaces, but that
doesn't help in this situation. In Tcl I would just say..

proc swap {a b} {
   upvar a x
   upvar b y
   set z x
   set x y
   set y z
swap a b

But in Python I have to say..

def swap (a, b):
   return b, a
a,b = swap(a,b)


def swap ():
   global a,b

I dont know if this is a good thing or a bad thing. Tcl cannot
handle multiple assignment, but Python cannot handle scoping.
It makes functions less powerful, but it also seems to make the
code more readable (IMHO).

BTW, I also noticed that python is rather weak in variable
substitution. In Tcl I can say..

set x 5; set y "x"
expr $$y + 1

I cant do this in python without resorting to something like

y={'x':'z', 'z':5}
y.get(y.get('x')) + 1

Cris A. Fugate          Lucent Technologies, Robust Process Automation
fugate at
630 713-8255            Sponsor of the lucent.lang.tcl newsgroup

On Fri, 10 Aug 2001, Duncan Booth wrote:

> "Matthew D. Wood" <woodm at> wrote in
> news:mailman.997452856.7709.python-list at
> > How do you make a swap function?
> >
> The easy way:
> a, b = b, a
> and of course you aren't restricted to two values:
> a, b, c = b, c, a
> If you are *really* sure you want a function that swaps its arguments, try:
> def swap(a, b): return b, a
> a, b = swap(a, b)
> Python isn't C. Its better.
> --
> Duncan Booth                                             duncan at
> int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
> "\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?

More information about the Python-list mailing list