On Tue, 29 Jul 2008 07:26:38 -0700 (PDT), "[EMAIL PROTECTED]" <[EMAIL 
PROTECTED]> wrote:

2. Will it be possible in Python 3.0 to do the following:

>>> def dotimes(n, callable):

        for i in range(n): callable()

>>> def block():

        nonlocal i
        for j in range(i):
                print j,
        print

dotimes seems ok and what is wrong with that function "block"? You do
not need to specify that i is "nonlocal", global i will be used.

i=10
def block():
       for j in range(i):
           print j,
       print
block()
0 1 2 3 4 5 6 7 8 9


Python doesn't have dynamic scoping.

 >>> def dotimes(n, callable):
 ...     for i in range(n):
 ...             callable()
 ...
 >>> def block():
 ...     for j in range(i):
 ...             print j,
 ...     print
 ...
 >>> def f():
 ...     dotimes(5, block)
 ...
 >>> f()
 Traceback (most recent call last):
   File "<stdin>", line 1, in ?
   File "<stdin>", line 2, in f
   File "<stdin>", line 3, in dotimes
   File "<stdin>", line 2, in block
 NameError: global name 'i' is not defined
 >>>

The "nonlocal" keyword in Python 3 won't do this, either.  It's for
referencing names in outer lexical scopes, not outer dynamic scopes.

Jean-Paul
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to