Re: block/lambda

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Jean-Paul Calderone

    Re: block/lambda

    On Tue, 29 Jul 2008 07:26:38 -0700 (PDT), "jiri.zahradil@ gmail.com" <jiri.zahradil@ gmail.comwrote:
    >
    >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
Working...