iu2 wrote:
On Jul 29, 9:36 am, Duncan Booth <[EMAIL PROTECTED]> wrote:

Your example becomes:

def dotimes(n, callable):
        for i in range(n): callable(i)

def block(i):
        for j in range(i):
                print j,
        print

dotimes(5, block)
0
0 1
0 1 2
0 1 2 3

The only thing you asked for that this doesn't do is make 'block'
anonymous, but actually that is a good thing.


Ok, I've got 2 questions about it:

1. Can you please explain why it is a good thing?

All functions defined with lambda expressions get the pseudoname '<lambda>'. All functions defined with def get the name you give it, which is typically unique within some scope. The representation of a function, whether intentionally printed or printed as part of a traceback, is more meaningful with a specific name than a general name.


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

If you indent block so it is a nested function, yes. But the nonlocal declaration is not needed unless you rebind 'i' from within the nested function, which block does not do.

tjr

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

Reply via email to