Uplevel functionality
Robin Becker
robin at jessikat.fsnet.co.uk
Wed Dec 31 09:47:06 EST 2003
In article <bsu3bu$5rm$1 at nemesis.news.tpi.pl>, Maciej Sobczak
<no.spam at no.spam.com> writes
How about this, apparently f_locals/globals are readonly so you won't be
allowed arbitrary scopes.
############################
C:\tmp>cat repeat.py
def repeat(n, script):
from sys import _getframe
f = _getframe(1)
L = f.f_locals
G = f.f_globals
for i in xrange(n):
exec script in G, L
def test():
i = 0
repeat(3,'print i;i+=5')
if __name__=='__main__':
test()
C:\tmp>repeat.py
0
5
10
C:\tmp>
############################
>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 #???
>
>
>Thank you very much,
>
--
Robin Becker
More information about the Python-list
mailing list