Uplevel functionality

Levente Sandor sandorlevi at yahoo.com
Wed Dec 31 10:45:34 EST 2003


Maciej Sobczak <no.spam at no.spam.com> wrote in message news:<bsu3bu$5rm$1 at nemesis.news.tpi.pl>...
> Hello,
> 
> I would like to know if there is any possibility in Python to execute 
> arbitrary scripts in the context higher in the stack frame.
> 
> In essence, I would like to have the equivalent of the following Tcl code:
> 
> proc repeat {n script} {
> 	for {set i 0} {$i < $n} {incr i} {
> 		uplevel $script
> 	}
> }
> 
> This allows me to do:
> 
> repeat 5 {puts "hello"}
> 
> prints:
> hello
> hello
> hello
> hello
> hello
> 
> Or this:
> 
> set i 10
> repeat 5 {incr i}
> puts $i
> 
> prints:
> 15
> 
> That second example shows that the script provided as a second parameter 
> to the "repeat" procedure (the script is "incr i") is executed in the 
> context where the procedure was called, not locally in the procedure itself.
> 
> The strongest analogy to the above repeat procedure in Tcl would be a 
> hypothetical Python function:
> 
> def repeat(n, script):
> 	for i in xrange(n):
> 		EVALUATE script HIGHER IN THE STACK #???
> 

Yes, it would be

def repeat(n, script):
    for i in xrange(n):
        exec(script, locals(), globals())

repeat(5, 'print "hello"')

i = 10
repeat(5, 'i += 1')
print i    


> 
> Thank you very much,

With pleasure,
----
levi




More information about the Python-list mailing list