Steven D'Aprano wrote: > I defined a nested function: > > def foo(): > def bar(): > return "bar" > return "foo " + bar() > > which works. Knowing how Python loves namespaces, I thought I could do > this: > > >>>>foo.bar() > > Traceback (most recent call last): > File "<stdin>", line 1, in ? > AttributeError: 'function' object has no attribute 'bar' > > but it doesn't work as I expected. > > > where do nested functions live? How can you access them, for example, to > read their doc strings? > > > It doesn't "live" anywhere: if I wrote the function
def foo(): locvar = 23 return locvar would you expect to be able to access foo.locvar? It's exactly the same thing: the statement def bar(): isn't executed until the foo() function is called, and its execution binds the name bar in foo's local namespace to the function that is defined. regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://holdenweb.blogspot.com Recent Ramblings http://del.icio.us/steve.holden -- http://mail.python.org/mailman/listinfo/python-list